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 中的自适应查询执行的主要内容,如果未能解决你的问题,请参考以下文章
提效 7 倍,Apache Spark 自适应查询优化在网易的深度实践及改进