背景
这是在3.1.1版本中自适应执行(AQE)存在的broadcast timeout的问题,具体的问题如下:
Caused by: org.apache.spark.SparkException: Could not execute broadcast in 1200 secs. You can increase the timeout for broadcasts via spark.sql.broadcastTimeout or disable broadcast join by setting spark.sql.autoBroadcastJoinThreshold to -1 at org.apache.spark.sql.execution.adaptive.BroadcastQueryStageExec$$anon$1.run(QueryStageExec.scala:217)
主要的问题是在于AQE阶段的任务的提交是同时提交且异步的,如果存在broadcast和shuffle,且shuffle占用了大量的资源以后,导致broadcast的job
没有资源导致broadcast超时,主要原因还是资源不够。
分析
- 1.该问题虽然在3.1.x版本有修复,但是修复的并不完全,具体可以参考 SPARK-33933
- 2.该问题在3.2版本进行了完全修复,具体可参考SPARK-36414
解决
目前该问题的解决是通过合并3.2已有的PR解决,目前合并的PR有
以及依赖的PR pr-33058