Spark3.0新特性-AQE

 想要更全面了解Spark内核和应用实战,可以购买我的新书。

《图解Spark 大数据快速分析实战》(王磊)【摘要 书评 试读】- 京东图书icon-default.png?t=M276https://item.jd.com/13613302.html

AQE

1.AQE的概念

Spark SQLSpark开发中使用最广泛的引擎,它使得我们通过简单的几条SQL语句就能完成海量数据(TBPB级数据)的分析。

AQEAdaptive Query Execution,自适应查询执行)的作用是对正在执行的查询任务进行优化。AQE使Spark计划器在运行过程中可以检测到在满足某种条件的情况下可以进行的动态自适应规划,自适应规划会基于运行时的统计数据对正在运行的任务进行优化,从而提升性能。

如图8-2所示,一条SQL语句在执行过程中会经历如下阶段:通过解析器把SQL语句解析为语法树;通过分析器把语法树解析为分析后的逻辑计划;通过优化器对执行计划进行优化,得到优化后的逻辑计划;逻辑计划通过计划器被转换为物理计划;物理计划在通过查询成本模型评估后,最优的那个将被执行。

Spark3.0新特性-AQE_第1张图片

 

图8-2  SQL语句的执行过程

上述流程是预先根据SQL语句和数据分布对SQL进行解析、优化和执行的,但由于执行计划是预估的,准确性很难保证,因此执行计划并不是最理想的。有了AQE后,Spark就可以在任务运行过程中实时统计任务的执行情况,并通过自适应计划将统计结果反馈给优化器,从而对任务再次进行优化,这种边执行、边优化的方式极大提高了SQL的执行效率。

AQE主要用于解决如下问题:

1)统计信息过期或缺失导致估计错误。

2)收集统计信息的代价较大。

3)因某些谓词使用自定义UDF导致无法预估。

4)开发人员在SQL上手动指定hints跟不上数据的变化。

2.AQE的工作原理

当查询任务提交后,Spark就会根据Shuffle操作将任务划分为多个查询阶段。在执行过程中,上一个查询执行完之后,系统会将查询结果保存下来,这样下一个查询就可以基于上一个查询的结果继续进行计算了。

如图8-3所示,SQL语句“select x, avgyfrom t group by x order by avgy)”的执行在两个Shuffle处被划分为两个查询阶段,第一个查询阶段包括扫描(scan)、聚合(aggregate)和Shuffle操作,第二个查询阶段包括聚合和Shuffle操作,最后对数据进行排序(sort)。

Spark3.0新特性-AQE_第2张图片

 

图8-3  Spark查询阶段

从图8-3可以看出,查询阶段的边界是进行运行时优化的最佳时机。在查询阶段的边界处,执行间歇、分区大小、数据大小等统计信息均已产生。Spark AQE主要就是通过这些统计信息对执行计划进行优化的,流程如下。

1)运行没有依赖的查询阶段。

2)根据新的统计信息优化剩余的查询阶段。

3)执行其他已经过优化且满足依赖的查询阶段。

4)重复步骤(2)和(3),不断执行,优化再执行,直到所有查询阶段执行完。

8-4展示了AQE的执行流程。

Spark3.0新特性-AQE_第3张图片

 

图8-4  AQE的执行流程

 想要更全面了解Spark内核和应用实战,可以购买我的新书。

《图解Spark 大数据快速分析实战》(王磊)【摘要 书评 试读】- 京东图书icon-default.png?t=M276https://item.jd.com/13613302.html

你可能感兴趣的:(Spark专栏,大数据,big,data,数据库,spark,大数据,数据仓库)