Spark3.0新特性-AQE

《图解Spark大数据快速分析实战》一书中详细介绍了SparkSQL的AQE(Adaptive Query Execution)特性,该特性在执行过程中动态优化查询计划,以提高SQL语句的执行效率。AQE主要针对统计信息过期、代价高、自定义UDF预估困难及手动hints不灵活等问题,通过实时统计信息对查询阶段进行优化,实现边执行边优化,显著提升了大数据分析的速度和效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 想要更全面了解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语句解析为语法树;通过分析器把语法树解析为分析后的逻辑计划;通过优化器对执行计划进行优化,得到优化后的逻辑计划;逻辑计划通过计划器被转换为物理计划;物理计划在通过查询成本模型评估后,最优的那个将被执行。

 

图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)。

 

图8-3  Spark查询阶段

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

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

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

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

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

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

 

图8-4  AQE的执行流程

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值