shuffle调优

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wuxintdrh/article/details/88072158

5.3、shuffle调优

spark在执行groupByKey、reduceByKey等操作时的,shuffle环节的调优。这个很重要。shuffle调优,其实对spark作业的性能的影响,是相当之高!!!经验:在spark作业的运行过程中,只要一牵扯到有shuffle的操作,基本上shuffle操作的性能消耗,要占到整个spark作业的50%~90%。10%用来运行map等操作,90%耗费在两个shuffle操作。groupByKey、countByKey。
参考文档:
https://www.jianshu.com/p/98a1d67bc226
https://blog.csdn.net/zhanglh046/article/details/78360762

  • 5.3.1、shuffle原理
  • 5.3.2、合并map端输出文件
    这里写图片描述
  • 5.3.3、调节map端内存缓冲与reduce端内存占比
    这里写图片描述
  • 5.3.4、控制shuffle reduce端缓冲大小以避免OOM

map端的task是不断的输出数据的,数据量可能是很大的。

但是,其实reduce端的task,并不是等到map端task将属于自己的那份数据全部写入磁盘文件之后,再去拉取的。map端写一点数据,reduce端task就会拉取一小部分数据,立即进行后面的聚合、算子函数的应用。

每次reduece能够拉取多少数据,就由buffer来决定。因为拉取过来的数据,都是先放在buffer中的。然后才用后面的executor分配的堆内存占比(0.2),hashmap,去进行后续的聚合、函数的执行。
注意与reduce端内存占比的区别设置spark.reducer.maxSizeInFlight

  • 5.3.5、HashShuffleManager与SortShuffleManager

猜你喜欢

转载自blog.csdn.net/wuxintdrh/article/details/88072158
今日推荐