Spark中Shuffle的调优

本文探讨了Spark Shuffle过程中的关键参数设置,如maxSizeInFlight、shuffle.compress、file.buffer等,重点讲解了何时选择BypassMergeSortShuffleHandle,以及如何根据Serializer和分区数调整。了解这些参数对性能的影响和在不同条件下的最佳实践。
摘要由CSDN通过智能技术生成
参数默认值描述
spark.reducer.maxSizeInFlight48M每次reduce的时候fetch数据的最大值,默认是48M。 如果网络状态OK,Spark的数据量是比较多的,可以尽可能的拉大这个值,例如96M。
spark.shuffle.compresstrueShuffle-write写数据到磁盘文件,是否开启压缩机制,默认是true。 开启压缩,需要配合spark.io.compression.codec(压缩方式)使用。
spark.shuffle.file.buffer32kshuffle-write的时候,一个磁盘文件对应第一个缓冲区,默认的大小是32kb。 为了尽可能的减少写磁盘的次数,可以将这个值调大,例如64kb。
spark.shuffle.io.maxReties3shuffle过程中,配置的失败重试的次数,默认是3次。 如果Shuffle的数据量比较大,就越容易出错,此时可以把这个值调大,例如10次。
spark.shuffle.io.retryWait5s两次Shuffle重试之间的时间间隔,默认5s。 如果多次失败,可能是网络波动,为了保证程序的稳定,可以把这个值调大,例如30s,60s
spark.shuffle.sort.bypassMergeThreshold200是否开启ByPass机制
spark.shuffle.memoryFraction0.2在executor中reduce拉取数据进行合并占用的内存大小,默认占executor的20%。 如果持久化操作比较少,Shuffle比较多,可以适当的调整这个值,例如0.3

 

三种ShuffleWriter Handle在什么情况下产生

1.BypassMergeSortShuffleHandle
1)不能在map端(分区内)进行combine 并且 numPartitions< =spark.shuffle.sort.bypassMergeThreshold  (200)
2)不满足上面条,再看Serializer支持重定位(即使用KryoSerializer),且分区数目小于16777216(最大分区号)时使用SerializedShuffleHandle。
3)上面都不满足再用BaseShuffleHandle

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值