Spark3.0中的AQE和DPP

1.AQE(Adaptive Query Execution)

  • 自适应查询执行
  • 默认不开启,通过设置spark.sql.adaptive.enabled=true开启
  • 主要包括三方面:
    • Join策略调整:运行时动态的将原来的Shuffle Join调整为Broadcast Join,依赖Shuffle中间文件的统计信息
    • 分区自动合并:通过spark.sql.adaptive.advisoryPartitionSizeInBytes 来直接指定合并后的目标分区大小,spark.sql.adaptive.coalescePartitions.minPartitionNum用来限制Reduce阶段在合并后的并行度不能小于该值
    • 自动倾斜处理:两个参数判断倾斜分区,另一个参数用于拆分倾斜分区,将所有数据分区排序,取中位数作为基数,然后乘以比例系数,得到阈值,分区大于阈值的有可能判定为倾斜分区,同时还要大于最低阈值,才能被判定为倾斜分区

2.DPP(Dynamic Partition Pruning)

  • 动态分区裁剪:基于运行时的信息进行分区裁剪,减少数据扫描量、降低I/O开销等
  • 需满足三个条件:
    • 必须是分区表
    • 只支持等值join
    • 小表过滤之后的数据必须小于广播阈值
posted @ 2022-02-16 23:42  马晟  阅读(874)  评论(0编辑  收藏  举报