Spark 3 中的自适应查询执行

Posted

技术标签:

【中文标题】Spark 3 中的自适应查询执行【英文标题】:Adaptive Query Execution in Spark 3 【发布时间】:2020-06-26 22:15:49 【问题描述】:

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

但是,我觉得有些奇怪。 对于以下切换加入策略的示例:

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

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

【问题讨论】:

【参考方案1】:

现在切换到广播是不是太晚了,因为两个数据集已经写入磁盘以进行混洗(地图侧混洗)? - 完全有道理的担忧,但“迟到总比没有好“ 对? ;-) Spark Performance Tuning 提到:

...这不如在 第一名,但总比继续进行排序合并连接要好,因为 我们可以保存连接两边的排序,并读取 shuffle 文件 本地以节省网络流量(如果 spark.sql.adaptive.localShuffleReader.enabled 是真的)

spark.sql.adaptive.localShuffleReader.enabled 运行时配置是在 Spark 3.0 中添加的,默认设置为 true。

我还认为,一旦执行者端广播SPARK-17556 出现,它可以帮助/建立在此基础上。

【讨论】:

感谢您的回复!这就是我正在寻找的确认

以上是关于Spark 3 中的自适应查询执行的主要内容,如果未能解决你的问题,请参考以下文章

自适应查询执行:在运行时提升Spark SQL执行性能

提效 7 倍,Apache Spark 自适应查询优化在网易的深度实践及改进

提效7倍,Apache Spark 自适应查询优化在网易的深度实践及改进

为啥在使用自适应查询执行时要使用广播时火花洗牌

MySQL中的自适应哈希索引

echarts的自适应问题(窗口自适应,侧边栏自适应,el-tab中的自适应)