【大数据开发】SparkCore——未优化的HashShuffleManager、优化的HashShuffleManager、SortShuffleManager、ByPass机制、Shuffle调优

这里有一篇大佬的博客,贼详细——Shuffle过程详解

一、什么是Shuffle

shuffle是分布式计算中,不可缺少的一个部分,同时也是分布式计算中性能消耗最大的部分。

二、 Spark中的Shuffle的演化流程

spark最早的Shuffle处理方式,是hashShuffleManager。
到spark0.8的时候,对HashShuffleManager进行了优化。
到spark1.2的时候,出现了SortShuffleManager,并替代HashShuffleManager称为了spark默认的Shuffle处理方式。

spark.shuffle.manager = sort | hash

三、未优化版本的HashShuffleManager

在这里插入图片描述

四、优化版本的HashShuffleManager

在这里插入图片描述

五、SortShuffleManager

在这里插入图片描述

六、ByPass机制

在这里插入图片描述

ByPass比起普通的SortShuffleManager来说,少了排序的过程,效率得到了提升。当不需要排序的时候,可以使用这个。

可以通过调整下面这个参数,开开启byPass
spark.shuffle.sort.bypassMergeThreshold = 200
这个数值表示开启byPass的最大分区数。当Spark的作业并行度或者分区的数量大于这个值的时候,就会走普通的SortShufflemanager,少于这个值,就会用ByPass机制。
如果不想执行排序的操作,那么调大这个值就可以了。

七、Shuffle的调优

参数默认值描述
spark.reducer.maxSizeInFlight48M每一次reduce拉取的数据的最大值,默认值48m,如果网络ok、spark数据很多,为了较少拉取的次数,可以适当的将这个值调大,比如96m。
spark.shuffle.compresstrueshuffle-write输出到磁盘的文件是否开启压缩,默认为true,开启压缩,同时配合spark.io.compression.codec(压缩方式)使用。
spark.shuffle.file.buffer32kshuffle过程中,一个磁盘文件对应一个缓存区域,默认大小32k,为了减少写磁盘的次数,可以适当的调大该值,比如48k,64k都是可以。
spark.shuffle.io.maxRetries3shuffle过程中为了避免失败,会配置一个shuffle的最大重试次数,默认为3次,如果shuffle的数据比较多,就越容易出现失败,此时可以调大这个值,比如10次。
spark.shuffle.io.retryWait5s两次失败重试之间的间隔时间,默认5s,如果多次失败,显然问题在于网络不稳定,所以我们为了保证程序的稳定性,调大该参数的值,比如30s,60s都是可以。
spark.shuffle.sort.bypassMergeThreshold200是否开启byPass机制的阈值。
spark.shuffle.memoryFraction0.2在executor中进行reduce拉取到的数据进行reduce聚合操作的内存默认空间大小,默认占executor的20%的内存,如果持久化操作相对较少,shuffle操作较多,就可以调大这个参数,比如0.3。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值