具有相同连接键的连续左连接导致Spark SQL执行程序之间的任务不平衡

时间:2019-12-06 08:16:01

标签: apache-spark apache-spark-sql

环境:

spark2.4.0
spark on yarn with 100 executors
spark.executor.memory           4g
spark.driver.memory             3g
spark.executor.cores            1

我执行一个具有七个连续左联接的sql,并使用相同的联接键,如下所示:

create table tmp.res as select * from 
  A a
  left join B b
     on a.id = b.id
  left join C c
     on a.id = c.id
  left join D d
     on a.id = d.id
  ...

我发现执行器之间的任务不平衡,这导致从热执行器获取某些任务失败。

我认为由于数据的局部性(相同的联接键),每个左联接都会将许多记录拖曳到同一执行程序中。

因此,我想由于相同的连接关键任务,随着每个连接的运行,偏斜变得越来越严重。最终,热执行器变得无法访问,应用程序崩溃了。

我说的对吗?

enter image description here

错误日志:

 ERROR ShuffleBlockFetcherIterator: Failed to get block(s) from

0 个答案:

没有答案