大数据开发之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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值