首页技术文章正文

Spark3.x的Adaptive Query Execution自适应查询技术

更新时间:2022-08-31 来源:黑马程序员 浏览量:

IT培训班

由于缺乏或者不准确的数据统计信息(元数据)和对成本的错误估算(执行计划调度)导致生成的初始执行计划不理想在Spark3.x版本提供Adaptive Query Execution自适应查询技术通过在”运行时”对查询执行计划进行优化, 允许Planner在运行时执行可选计划,这些可选计划将会基于运行时数据统计进行动态优化, 从而提高性能。

Adaptive Query Execution AQE主要提供了三个自适应优化:

• 动态合并 Shuffle Partitions

• 动态调整Join策略

• 动态优化倾斜Join(Skew Joins)

1.动态合并 Dynamically coalescing shuffle partitions

可以动态调整shuffle分区的数量。用户可以在开始时设置相对较多的shuffle分区数,AQE会在运行时将相邻的小分区合并为较大的分区。

动态合并

2.动态调整Join策略 Dynamically switching join strategies

此优化可以在一定程度上避免由于缺少统计信息或着错误估计大小(当然也可能两种情况同时存在),而导致执行计划性能不佳的情况。这种自适应优化可以在运行时sort merge join转换成broadcast hash join,从而进一步提升性能。

Adaptive Query Execution 自适应查询(SparkSQL)

3.动态优化倾斜Join

skew joins可能导致负载的极端不平衡,并严重降低性能。在AQE从shuffle文件统计信息中检测到任何倾斜后,它可以将倾斜的分区分割成更小的分区,并将它们与另一侧的相应分区连接起来。这种优化可以并行化倾斜处理,获得更好的整体性能。

触发条件:

分区大小 > spark.sql.adaptive.skewJoin.skewedPartitionFactor (default=10) * "median partition size(中位数分区大小)"

分区大小 > spark.sql.adaptive.skewJoin.skewedPartitionThresholdInBytes (default = 256MB)

总结:

(1) AQE的开启通过: spark.sql.adaptive.enabled 设置为true开启。

(2) AQE是自动化优化机制, 无需我们设置复杂的参数调整, 开启AQE符合条件即可自动化应用AQE优化。

(3) AQE带来了极大的SparkSQL性能提升。

分享到:
在线咨询 我要报名
和我们在线交谈!