Spark shuffle失败的可能原因 及解决办法

 

大数据Spark任务中,分区数过小,每个分区的数据量会很大,执行join、crossjoin的过程,有可能导致shuffle write失败的操作。 可能原因包括:

  •    executor.memory内存不足,导致相应比例的nio资源不足,
  •    executor.memoryOverhead不足,没有足够的nio资源,从而导致失败。

 

其他的可能导致shuffle write失败或者节点访问异常的原因:   executor--cores数目过大,适当降低executor-cores,增加num-executors,不降低运行速度,但是每个executor的内存需求降低,shuffle write失败的问题可以避免。

 

repartition后,增大分区数,减小每个分区的数据量,可以总体避免上述问题,但是如果设置分区过大,可能造成如下的问题:

1) 频繁的创建task,并行的running数目一直在变化的,比如最大是可能task数700,执行完639个后,剩下61个task还在执行这一批,从而显示出还有61个running,频繁的创建任务消耗大量资源

2)高并发执行完小的/均匀的分区后,最后剩余的部分分区,可能因为划分不均匀,反而只利用少量task资源,导致耗时超长。

 

 

posted on 2021-12-08 18:19  兵者  阅读(838)  评论(0编辑  收藏  举报

导航