spark之shuffle参数优化

spark.shuffle.file.buffer    默认32k
    shuffle write task端的缓冲区,到达阈值后,溢写到磁盘。将数值调大,减少io操作,提升整体性能(具体数值根据实际情况设置)
spark.reducer.maxSizeInFlight        默认48M
    reduce shuffle task端每次拉取的数据大小。将数值调大,降低io带来的性能影响
spark.shuffle.io.maxRetyies        默认3次
    shuffle read task访问shuffle write task的重试次数,如果超过该次数,read端的task就会被kill掉。调大该数值,提高重试次数,防止write端在进行full gc或其他操作read被kill影响整个程序的正常执行
spark.shuffle.io.retryWait        默认5s
    shuffle read task访问shuffle write task的等待时间,将数值调大,效果同上
spark.shuffle.memoryFraction        默认0.2
    分配给shuffle read task的聚合内存,可将数值调小,提高shuffle的运行空间
spark.shuffle.manager        默认sort
    spark排序方式有3种,hash,sort,Tungsten-sort(可以使用堆外内存)
    如果数据不需要排序,设置成HashShuffleManager,效率更高
spark.shuffle.sort.bypassMergeThreshold    默认200
    当shuffle read task小于等于这个数量时,启用bypass机制,不会进行排序,而是按照未经优化的HashShuffleManager方式写数据,最后每个task所产生的所有临时文件合并成一个大文件,并创建一个单独的索引文件
    如果处理数据不需要SortShuffleManager,将该数值调大,大于shuffle read task的数量,减少排序带来的性能开销,但该方式会产生大量的磁盘文件,shuffle write性能有待提高
spark.shuffle.consolidateFiles        默认false
    如果设置为true,就会开启consolidate机制,会大幅合并shuffle write的文件,对于shuffle read来说减少io操作,提升性能
    如果不需要SortShuffleManager,除了使用bypass机制,还可以将spark.shuffle.manager手动设置成hash,使用HashShuffleManager,同时打开consolidate机制,比单独使用bypass机制效率机制高出10%~30%

猜你喜欢

转载自blog.csdn.net/weixin_42487706/article/details/89374323