Spark 3 中的自适应查询执行

Was*_*oui 6 optimization performance shuffle apache-spark apache-spark-sql

我刚刚了解了 Spark 3.0 中引入的新自适应查询执行 (AQE)。

不过,有一点我觉得很奇怪。对于以下切换加入策略的示例: 在此输入图像描述

在AQE决定切换到广播模式之前,第一阶段和第二阶段已经完全结束(包括地图侧洗牌)。

我的问题:既然两个数据集已经写入磁盘进行洗牌(地图侧洗牌),那么切换到广播是否已经太晚了?在大多数情况下,这种切换会比继续进行reduce side shuffle 更有效吗?我想是的,因为 Databricks 的人已经做了这个选择,但我想确保我没有错过任何东西..

maz*_*cha 2

由于两个数据集已经写入磁盘进行洗牌(地图侧洗牌),切换到广播是否已经太晚了? - 完全有道理的担忧,但“迟到总比不到好”,对吧?;-) Spark 性能调优提到:

\n
\n

...这不如一开始就计划广播散列连接那么有效,但它比继续进行排序合并连接要好,因为\n我们可以保存连接两侧的排序,并在本地读取随机播放文件以节省网络流量(如果\nspark.sql.adaptive.localShuffleReader.enabled为 true)

\n
\n

spark.sql.adaptive.localShuffleReader.enabledSpark 3.0 中添加了运行时配置,默认设置为 true。

\n

我还认为,一旦执行器端广播SPARK-17556出现,它就可以提供帮助/构建。

\n