Spark DynamicJoinSelection 规则根据AQE统计信息动态调整Join策略

背景

本文基于Spark 3.5.3

在Spark引入了AQE以后,Spark在运行的时候能够拿到运行时候的Shuffle统计信息,这些信息可以更好的来调整join的策略,当下规则下这种策略的调整是通过增加hint来进行控制的, 规则的目的是防止负优化

分析

这里会有三种优化场景:
1. 检测大量空分区 → 添加 NO_BROADCAST_HASH HINT

对应的代码如下:

复制代码
 private def hasManyEmptyPartitions(mapStats: MapOutputStatistics): Boolean = {
    val partitionCnt = mapStats.bytesByPartitionId.length
    val nonZeroCnt = mapStats.bytesByPartitionId.count(_ > 0)
    partitionCnt > 0 && nonZeroCnt > 0 &&
      (nonZeroCnt * 1.0 / partitionCnt) < conf.nonEmptyPartitionRatioForBroadcastJoin
  }

这里有个配置spark.sql.adaptive.nonEmptyPartitionRatioForBroadcastJoin默认是0.2

这种情况主要是在于AQE 中 等值join 转换 BroadcastHashJoinExec,防止 转化为BroadcastHashJoinExec,因为此时的shuffle数据已经有了,而且非空的分区数据比较少,直接shuffle join会更快,因为broadcast join还会有broadcast 的过程
2.分区数据小 → 添加 PREFER_SHUFFLE_HASH HINT

对应的代码如下:

复制代码
private def preferShuffledHashJoin(mapStats: MapOutputStatistics): Boolean = {
    val maxShuffledHashJoinLocalMapThreshold =
      conf.getConf(SQLConf.ADAPTIVE_MAX_SHUFFLE_HASH_JOIN_LOCAL_MAP_THRESHOLD)
    val advisoryPartitionSize = conf.getConf(SQLConf.ADVISORY_PARTITION_SIZE_IN_BYTES)
    advisoryPartitionSize <= maxShuffledHashJoinLocalMapThreshold &&
      mapStats.bytesByPartitionId.forall(_ <= maxShuffledHashJoinLocalMapThreshold)
  }

这里有spark.sql.adaptive.maxShuffledHashJoinLocalMapThreshold(默认是0),只要所有分区大小小于这个阈值,就使用hash join,因为如果使用SortMergeJoin的话,在join之前还会有Sort的操作,而hash join没有这个sort操作,数据量小的情况,hash join更快

*3.两者都满足 → 添加 SHUFFLE_HASH HINT

如果以上两种情况都满足,则直接加 SHUFFLE_HASH HINT

注意:以上发生的转换是在用户没有手动指定HINT的前提下

总体的决策逻辑流程如下:

复制代码
                              ┌─────────────────────────┐
                              │  Join 节点 (ExtractEquiJoinKeys) │
                              └───────────┬─────────────┘
                                          │
                    ┌─────────────────────┼─────────────────────┐
                    ▼                                         ▼
           检查 Left 子节点                            检查 Right 子节点
                    │                                         │
                    ▼                                         ▼
        ┌───────────────────────┐              ┌───────────────────────┐
        │ ShuffleQueryStageExec │              │ ShuffleQueryStageExec │
        │ 且 isMaterialized     │              │ 且 isMaterialized     │
        │ 且 mapStats.isDefined │              │ 且 mapStats.isDefined │
        └───────────┬───────────┘              └───────────┬───────────┘
                    │                                         │
         ┌──────────┴──────────┐                ┌──────────┴──────────┐
         ▼                     ▼                ▼                     ▼
   Many Empty Partitions?  All Partitions     Many Empty Partitions?  All Partitions
         │                     Small?                │                     Small?
         ▼                     ▼                    ▼                     ▼
    ─────────────       ─────────────        ─────────────       ─────────────
         │                     │                      │                     │
         ▼                     ▼                      ▼                     ▼
    demote BHJ:          prefer shuffle       demote BHJ:          prefer shuffle
    NO_BROADCAST_HASH    hash: PREFER_         hash: PREFER_        hash: PREFER_
                        SHUFFLE_HASH          SHUFFLE_HASH         SHUFFLE_HASH
相关推荐
科研前沿4 小时前
镜像视界 CameraGraph™+多智能体:构建自感知自决策的全域空间认知网络技术方案
大数据·运维·人工智能·数码相机·计算机视觉
发哥来了4 小时前
AI视频生成模型选型指南:五大核心维度对比评测
大数据·人工智能·机器学习·ai·aigc
发哥来了4 小时前
AI驱动生产线的实际落地:一个东莞厂商的技术选型实录
大数据·人工智能·机器学习·ai·aigc
历程里程碑6 小时前
4 Git远程协作:从零开始,玩转仓库关联与代码同步(带实操代码讲解)
大数据·c++·git·elasticsearch·搜索引擎·gitee·github
AI周红伟6 小时前
周红伟:运营商一季度净利集体下滑 Token运营提速
大数据·网络·人工智能
无忧智库6 小时前
研发管理的下一个十年:当多Agent协同遇上知识图谱,传统项目管理体系正在被颠覆(WORD)
大数据·人工智能·知识图谱
汽车仪器仪表相关领域8 小时前
Kvaser Memorator Professional 5xHS CB:五通道CAN FD裸板记录仪,赋能多总线系统集成测试的旗舰级核心装备
大数据·网络·人工智能·单元测试·汽车·集成测试
头条快讯9 小时前
中国非遗美食文化的跨国传承:鲁味居在北美市场的标准化实践与布局
大数据·人工智能
我是发哥哈11 小时前
深度评测:五款主流AI培训平台的课程交付能力对比
大数据·人工智能·学习·机器学习·ai·chatgpt
Datakeji11 小时前
2026年AI大模型接口加速站榜单新鲜出炉!五大平台硬核数据全面揭秘
大数据·人工智能