写点什么

大数据开发开源平台之 Spark SQL 的基础

  • 2021 年 12 月 01 日
  • 本文字数:1140 字

    阅读完需:约 4 分钟

大数据开发开源平台之Spark SQL的基础

Spark SQL 作为 Spark 计算查询的重要支撑,在 Spark 生态当中的重要性是不言而喻的。Spark SQL 使得一般的开发人员或者非专业的开发人员,也大数据培训能快速完成相应的计算查询需求,这也是其存在的重要意义。今天的大数据开发学习分享,我们就来讲讲 Spark SQL 及基础引擎。

在编程级别上,Spark SQL 允许开发人员对具有模式的结构化数据发出与 ANSI SQL:2003 兼容的查询。自从在 Spark1.3 中引入以来,Spark SQL 已经发展成为一个强大的引擎,在此基础上建立了许多高级的结构化功能。除了允许你对数据发出类似 SQL 的查询外,Spark SQL 引擎还包括:

统一 Spark 组件,并允许抽象为 Java、Scala、Python 和 R 中的 DataFrame/Dataset,这简化了对结构化数据集的工作。

连接到 Apache Hive 元存储库和表。

从结构化文件(JSON、CSV、文本、CSV、拼花、ORC 等)读写具有特定 schema 的结构化数据。并将数据转换为临时表。

提供交互式 Spark SQL Shell 支持快速数据浏览。

通过标准数据库 JDBC/ODBC 连接器提供与外部工具之间的桥梁。

为 JVM 生成优化的查询计划和紧凑的代码,以便最终执行。



Spark SQL 引擎的核心是 Catalyst 优化器和 Project Tungsten。它们一起支持高级 DataFrame、Dataset API 和 SQL 查询。

优化器

Catalyst 优化器接受计算查询,并将其转换为一个执行计划。它经历了四个转换阶段,如下图所示:



阶段 1:分析

Spark SQL 引擎首先会为 SQL 或 DataFrame 查询生成一个抽象语法树(AST)。在此初始阶段,任何列或表名都将会被解析为内部的 Catalog,catalog 是一个指向 Spark SQL 的编程接口,该接口包含列、数据类型、函数、表、数据库、列名等等的列表。一旦全部成功解决,查询将继续进入下一阶段。

阶段 2:逻辑优化

该阶段包括两个内部阶段。应用基于标准化的优化方法,Catalyst 优化器将首先构建一组多个计划,然后使用其基于成本的优化器(CBO)将成本分配给每个计划。这些计划展示为算子树的形式;例如,它们可能包括常数折叠、谓词下推、投影计算、布尔表达式简化等过程。这个逻辑计划是对物理计划的输入。

阶段 3:物理执行计划

在此阶段,Spark SQL 使用与 Spark 执行引擎相匹配的物理运算符,为所选的逻辑计划生成最佳的物理计划。

阶段 4:代码生成

查询优化的最后阶段涉及生成在每台机器上运行的高效 Java 字节码。因为 Spark SQL 可以对内存中加载的数据集进行操作,所以 Spark 可以使用最先进的编译器技术来生成代码以加快执行速度。换句话说,它充当了编译器。Tungsten 项目在这里发挥了重要作用,是整个阶段代码生成的利器。

整个阶段的代码生成是什么呢?这是一个物理查询优化阶段,它将整个查询分解成一个函数,摆脱虚拟函数调用,并使用 CPU 寄存器存储中间数据。Spark2.0 中引入的第二代 Tungsten 引擎使用此方法生成紧凑的 RDD 代码以便最终执行。这种精简的策略显著提高了 CPU 的效率和性能。

原创作者:robin

用户头像

关注尚硅谷,轻松学IT 2021.11.23 加入

还未添加个人简介

评论

发布
暂无评论
大数据开发开源平台之Spark SQL的基础