主页 > 新闻资讯 > 大数据培训:Spark SQL执行计划过程详解

大数据培训:Spark SQL执行计划过程详解

作者:张老师 浏览次数: 2021-04-19 17:31
之前我们对Spark SQL执行计划做了简单的入门介绍,Spark SQL尤其是在性能优化的阶段,如果能够对执行计划有清晰的认识和了解,是能够大大提升工作效率的。今天的大数据培训分享,我们就来对Spark SQL执行计划过程做个详细的解读。

通常来说,执行计划的总体结构是一颗树,每个节点表示一个操作符,这个操作符描述了执行的一些操作(针对物理执行计划为:对哪张表的、哪个字段操作等等)。

大数据培训:Spark SQL执行计划过程详解

Spark SQL执行计划过程

1、生成Unresolved逻辑执行计划

Spark SQL中的Parser组件检查SQL语法上是否有问题,然后生成Unresolved(未决断)的逻辑计划。这也是逻辑执行计划的第一个版本。之所以叫做Unresolved逻辑执行计划,因为SQL语法可能是正确的,但有一些表名或者列名不存在。这一步是不检查表名、不检查列名的。

此外,SparkSQL中有一个名为Catalog的组件,这个组件其实是一个存储库。它里面包含了SparkSQL表信息、DataFrame、以及DataSet的所有信息,如果元数据来自于Hive,它会将MySQL存储的元数据拉入到Catalog组件中。

2、生成Analyzed逻辑执行计划

SparkSQL中的Analyzer组件会先分析之前生成的Unresolved逻辑执行计划,并通过访问Spark中的Catalog存储库来进行表名、列名的解析、验证。例如:之前的'UnresolvedRelation[ITEMS]、'UnresolvedRelation[ORDERS]标记为Unresolved的关系,在这个过程会被处理为实际的表和实际的列名。

在这个类似于元数据库的Catalog中,进一步地进行语义分析、验证数据结构、模式(schema)、类型等。如果一切都很顺利,那么该逻辑执行计划会标记为Resolved逻辑执行计划。这个操作是由Spark SQL中的Analyzer组件完成的,它帮助我们从Catalog存储库中解析验证语义、列名、表名等。如果Analyzer组件无法解析表名、列名则会失败。否则,就会生成Resolved逻辑执行计划。

3、生成Optimized逻辑执行计划

生成了Analyzed逻辑执行计划之后,该逻辑执行计划会传递给Catalyst Optimizer,Catalysts Optimizer是Spark SQL重要的优化器,它根据各种规则(例如:过滤器、聚合)进行优化。它将逻辑操作重新排序以优化逻辑执行计划。例如:

在多表关联查询时,它来决定执行顺序

尝试在进行执行Project(投影查询)之前,评估Filter来优化查询等等。

优化结束后的逻辑执行计划就是Optimized逻辑执行计划。

4、生成物理执行计划

SparkSQL要能够在Spark执行,是必须要生成物理执行计划的。Spark SQL中的Planner组件依据Catalyst Optimizer基于各种策略会生成一个或多个物理执行计划。

5、选择最佳物理执行计划

Planner组件会基于Cost Model(成本模型)会根据执行时间和资源消耗来预测估计每个物理执行计划,并且选择其中一个作为最终的追加物理执行计划。

6、Codegen

Codegen是可选的,默认spark.sql.codegen.wholeStage为true,是打开的。如果禁用了Codegen,Spark将使用物理执行计划直接开始在每个子节点中运行。Codegen阶段其实就是对物理执行计划进一步地进行优化。它将多个物理运算符(或者是在物理执行计划树中支持codegen的子树)融合到一个Java函数中,这个过程称之为Whole-Stage Java Code Generation。

关于大数据培训,Spark SQL执行计划过程,以上就为大家做了详细的介绍了。Spark SQL部分,是Spark当中的重点,这个部分的学习,建议大家多投入时间和精力,认真去搞懂内部细节。成都加米谷大数据,专业大数据培训机构,大数据开发,数据分析与挖掘,零基础学习班本月正在招生中,课程大纲及试听课程可联系客服预约!
热点排行
推荐文章
立即申请>>