【赵渝强老师】什么是Spark SQL_大数据

首先,我们用过一个小视频来了解一下如何使用Spark SQL。比如,我们可以使用Spark SQL来处理一个JSON文件。


点击这里查看视频“【赵渝强老师】什么是Spark SQL”



从Shark说起

Shark即hive on Spark,为了实现与Hive兼容,Shark在HiveQL方面重用了Hive中HiveQL的解析、逻辑执行计划、翻译执行计划优化等逻辑,可以近似认为将物理执行计划从MapReduce作业替换成了Spark作业,通过Hive的HiveQL解析,把HiveQL翻译成Spark上的RDD操作。Shark的出现,使得SQL-on-Hadoop的性能比Hive有了10-100倍的提高。

Shark的设计导致了两个问题:

执行计划优化完全依赖于Hive,不方便添加新的优化策略。

因为Shark是线程级并行,而MapReduce是进程级。因此,Spark在兼容Hive的实现上存在线程安全问题,导致Shark不得不使用另外一套独立维护的打了补丁的Hive源码分支。

Spark SQL设计


Spark SQL在Hive兼容层面仅依赖HiveQL解析、Hive元数据,也就是说,从HQL被解析成抽象语法树起,就全部由Spark SQL接管了。Spark SQL执行计划生成和优化都由Catalyst(函数式关系查询优化框架)负责。

Spark SQL增加了DataFrame(即带有Schema信息的RDD),使用户可以在Spark SQL中执行SQL语句,数据既可以来自RDD,也可以是Hive、HDFS、Cassandra等外部数据源,还可以是JSON格式的数据。Spark SQL提供DataFrame API,可以对内部和外部各种数据源执行各种关系操作。

Spark SQL可以支持大量的数据源和数据分析算法。Spark SQL可以融合传统关系数据库的结构化数据管理能力和机器学习算法的数据处理能力。