spark shuffle 调优
spark/mr作业在执行过程中,数据重排的过程,主要发生在mr的话,就在map输出和reduce输入的过程,如果在spark就发生在窄依赖阶段和宽依赖阶段。
shuffle操作是分布式计算不可避免的一个过程,也是分布式计算最消耗性能的一个部分。
1.1 spark shuffle执行过程
spark中由于不同的ShuffleManager的的配置,会造成shuffle执行的流程不一样,spark发展至今,shuffle经历了如下三个阶段:
-
未经优化hashShuffleManager
-
经过优化的hashShuffleManager—>shuffleGroup 0.8出现
-
SortShuffleManager 1.2以后成为默认
到底应该使用哪一个shuffleManager来负责shuffle的执行,可以通过spark参数在sparkconf或者spark-sbumit脚本进行控制:spark.shuffle.manager=hash/sort(sort为默认)