暂无说说

Spark SQL简介

pyspark jiajun 8个月前 (03-03) 115次浏览 0个评论 扫描二维码

Spark SQL 是 Spark 生态系统中非常重要的组件,其前身为 Shark。Shark 是 Spark 上的数据仓库,最初设计成与 Hive 兼容,但是该项目于 2014 年开始停止开发,转向 Spark SQL。Spark SQL 全面继承了 Shark,并进行了优化。

Shark

Shark 即 Hive on Spark,为了实现与 Hive 兼容,Shark 在 HiveQL 方面重用了 Hive 中的 HiveQL 解析、逻辑执行计划翻译、执行计划优化等逻辑,可以近似认为仅将物理执行计划从 MapReduce 作业替换成了 Spark 作业,通过 Hive 的 HiveQL 解析,把 HiveQL 翻译成 Spark 上的 RDD 操作。

Shark 的设计导致了两个问题:一是执行计划优化完全依赖于 Hive,不方便添加新的优化策略;二是因为 Spark 是线程级并行,而 MapReduce 是进程级并行,因此,Spark 在兼容 Hive 的实现上存在线程安全问题,导致 Shark 不得不使用另外一套独立维护的打了补丁的 Hive 源码分支。
Shark 的实现继承了大量的 Hive 代码,因而给优化和维护带来了大量的麻烦,特别是基于 MapReduce 设计的部分,成为整个项目的瓶颈。因此,在 2014 年的时候,Shark 项目中止,并转向 Spark SQL 的开发。

Spark SQL 设计

Spark SQL 的架构如图 16-12 所示,在 Shark 原有的架构上重写了逻辑执行计划的优化部分,解决了 Shark 存在的问题。Spark SQL 在 Hive 兼容层面仅依赖 HiveQL 解析和 Hive 元数据,也就是说,从 HQL 被解析成抽象语法树(AST)起,就全部由 Spark SQL 接管了。Spark SQL 执行计划生成和优化都由 Catalyst(函数式关系查询优化框架)负责。

图 16-12-Spark-SQL 架构

Spark SQL 增加了 SchemaRDD(即带有 Schema 信息的 RDD),使用户可以在 Spark SQL 中执行 SQL 语句,数据既可以来自 RDD,也可以来自 Hive、HDFS、Cassandra 等外部数据源,还可以是 JSON 格式的数据。Spark SQL 目前支持 Scala、Java、Python 三种语言,支持 SQL-92 规范。从 Spark1.2 升级到 Spark1.3 以后,Spark SQL 中的 SchemaRDD 变为了 DataFrame,DataFrame 相对于 SchemaRDD 有了较大改变,同时提供了更多好用且方便的 API,如图 16-13 所示。

图 16-13-Spark-SQL 支持的数据格式和编程语言

Spark SQL 可以很好地支持 SQL 查询,一方面,可以编写 Spark 应用程序使用 SQL 语句进行数据查询,另一方面,也可以使用标准的数据库连接器(比如 JDBC 或 ODBC)连接 Spark 进行 SQL 查询,这样,一些市场上现有的商业智能工具(比如 Tableau)就可以很好地和 Spark SQL 组合起来使用,从而使得这些外部工具借助于 Spark SQL 也能获得大规模数据的处理分析能力。

喜欢 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址