Spark性能优化第六季--Shuffle性能调优

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

Shuffle性能调优
一、Shuffle性能调优
1.问题:Shuffle output file lost?真正的原因是GC导致的!!!如果GC尤其是Full GC产生通常会导致线程停止工作,此时下一个Stage的Task默认情况下会尝试重试来获取数据,一般重试3
次重试时间为5s,也就是默认情况下15s内如果还是无法抓取数据的话,就会出现Shuffle output file lost的情况,进而会导致Task重试,甚至会导致Stage重试,最严重的是会导致App失败,在此时首先要采用高效的内存数据结构和序列化机制、JVM的调优来减少Full GC的产生;
2.在shuffle的时候,Reducer端获取数据会有一个指定大小的缓存空间,如果内存足够大的情况下,可以适当的增大该缓存空间,否则会spill 到磁盘上,影响效率,此时可以调(增大)spark.reducer.maxSizeInFlight参数
3.在ShuffleMapTask端通常也会增大Map任务写磁盘的缓存,默认情况下是32k;
Spark.shuffe.file.buffer 32k;
4.调整shuffle中读取数据的重试的次数,默认是3次,通常建议增大重试次数
5.调整获取shuffle数据重试的时间间隔,默认5s,强烈建议提高该时间间隔,spark.shuffle.io.retryWait 5s
6.在Reducer端做Aggregation的时候,默认是20%的内存来做Aggregation,如果超出了的大小,就会溢出到磁盘上,建议调大百分比 

猜你喜欢

转载自blog.csdn.net/someby/article/details/83211015