开发者学堂课程【大数据 Spark 2020版(知识精讲与实战演练)第三阶段:Spark SQL 是什么_历史和重要性】学习笔记,与课程紧密联系,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/690/detail/12034
Spark SQL 是什么_历史和重要性
前面我们了解到声明式的 SQL,是一个特别重要的数据查询的语言和手段,如果是这样,像 spark 这种大的工具,肯定会试图去支持 SQL,spark 支持 SQL 的时候有什么样的历史,他做了什么样无用的工作呢?
我们接下来说一说 spark SQL 的特点。通过对于 spark SQL 特点的了解,希望大家对于 spark SQL 有一个更深刻的认识,希望大家能理解 spark SQL 为什么要设计成现在的这个样子。
spark SQL的特点
1、历史性
SQL,是数据分析领域一个非常重要的一个查询范式,Spark 一直想去支持这种范式,我们来看一看大概的一个步骤
如下图所示:
在很久以前,必须要去搞一个在 hadoop 之上去进行 SQL 查询的这样的一个工具,这时业界刚好有一个现成的工具,叫做 Hive,要想能不能继续Hive来进行一些操作?
他就做了一个 Shack 去生成了 SQL 这样的一个项目。
整体上的步骤:
Hive:
解决的问题
Hive 实现了 SQL on Hadoop,使用 MapReduce 执行任务
简化了 MapReduce 任务
新的问题
Hive的查询延迟比较高,原因是使用MapReduce做调度
Shack:
解决的问题
Shark改写Hive的物理执行计划,使用Spark 作业代替
MapReduce 执行物理计划
使用列式内存存储
以上两点使得Shark的查询效率很高
新的问题
Shark 重用了 Hive 的 SQL 解析,逻辑计划生成以及优化,所以
其实可以认为 Shark 只是把 Hive 的物理执行替换为了 Spark 作业
执行计划的生成严重依赖 Hive,想要增加新的优化非常困难
Hive使用 MapReduce 执行作业,所以 Hive 是进程级别的并行,
而 Spark 是线程级别的并行,所以 Hive 中很多线程不安全的代码不适用于 Spark
由于以上问题, Shark 维护了 Hive 的一个分支,并且无法合并进主线,难以为继。
spark SQL:
解决的问题
Spark SQL 使用 Hive 解析 SQL 生成 AST 语法树,将其后的逻辑
计划生成,优化,物理计划都自己完成,而不依赖 Hive
执行计划和优化交给优化器`Catalyst '
内建了一套简单的 SQL 解析器,可以不使用 HQL,此外,还引入和
DataFrame 这样的 DSL API,完全可以不依赖任何 Hive 的组件
hark 只能查询文件,Spark sQL 可以直接降查询作用于 RDD,这
一点是一个大进步
新的问题
对于初期版本的 SparkSQL,依然有挺多问题,例如只能支持 SQL
的使用,不能很好的兼容命令式,入口不够统一等
Dataset:
SparkSQl 在2.0时代,增加了一个新的 API,叫做 Dataset, Dataset 统一和结合了 SQL的访间和命令式 API 的使用,这是一个划时代的进步。
在 Dataset 中可以轻易的做到使用 SQL 查询并且筛选数据,然后使用命令式 API 进行探索式分析。
2、重要性
我们在整个spark阶段的第一天,介绍了 spark,有很多上层的一些工具,比如说 streaming,比如说 graphx,比如说 MUib,这些上层的工具,都是基于 spark SQL。
所以对于整个 spark 体系来说,Spark SQL 很重要,也就是说我们现在接触了两个东西,第一个是我们的 RDD,第二个是 Spark SQL,是基于 RDD 他底层,在我们 spark SQL 上层有很多其他的组件,所以,直接暴露给用户去使用的更多的接口是 sparks,也就是说在这一层,用户用的最多。
RDD 是底层,它代表根本的运行原理,代表了对于这种过程特别在意的,这种情况下你怎么去处理数据。纯命令的式开发好,离用户最近,用户最多的还是去使用。
这是我们本节,简单介绍一下 spark SQL 为什么出现。根本上来讲,它是什么,其次,我们又介绍了 SQL 的重要性。