Spark SQL 的设计带来了两个主要问题:
首先,执行计划的优化完全依赖于 Hive,这使得添加新的优化策略变得困难。其次,由于 Spark 是线程级别的并行处理,而 MapReduce 是进程级别的并行处理,因此 Spark 在实现与 Hive 兼容时面临线程安全的问题,这导致 Shark 不得不使用一个独立维护的、经过修改的 Hive 源代码分支。
在与 Hive 兼容方面,Spark SQL 只依赖于 HiveQL 的解析以及 Hive 元数据。这意味着从 HQL 被解析成抽象语法树(AST)之后,整个过程就由 Spark SQL 接管了。Spark SQL 的执行计划生成和优化工作则由 Catalyst(一个函数式的、关系型的查询优化框架)负责。
Spark SQL 引入了 DataFrame(即带有模式信息的 RDD),使用户能够在 Spark SQL 中执行 SQL 语句。数据可以来源于 RDD,也可以来自 Hive、HDFS、Cassandra 等外部数据源,甚至可以是 JSON 格式的数据。目前,Spark SQL 支持 Scala、Java 和 Python 三种编程语言,并且符合 SQL-92 规范。
本文素材来源于陈思祁老师《大数据应用与分析》课程的 PPT。文章由 LearningYard 新学苑原创,如有任何问题或侵权行为,请联系我们。