spark shuffle 补充概念

spark shuffle

我们在前面的文章说过,所谓shuffle,就是spark RDD的一种宽依赖关系,父RDD的数据会发送给多个子RDD

spark中Map和Reduce概念

在Shuffle过程中.提供数据的称之为Map端(Shuffle Write)接收数据的称之为Reduce端(Shuffle Read),在Spark的两个阶段中,总是前一个阶段产生一批Map提供数据,下一阶段产生一批Reduce接收数据
在这里插入图片描述

spark中提供了两类shufflemanager,分别是hashshufflemanager和sortshufflemanager

HashShuffleManager

数据按hash进行分组,下图中相同分组的数据颜色一致,相同分组的数据在reduce时通过网络发送到同一个地方
在这里插入图片描述

对同一个executor中的同一个分组但不同task产生的数据,task共享buffer缓冲区能减少网络io和写磁盘次数,提升性能

在这里插入图片描述

SortShuffleManager

SortShuffleManager的运行机制主要分为两种,一种普通运行机制,一种bypass运行机制

普通运行机制

内存数据写入磁盘后会汇聚到同一个文件中再发送给reduce节点,同时reduce节点任务通过索引文件确认该从整个文件中什么位置读取
在这里插入图片描述

bypass运行机制

bypassi运行机制的触发条件如下:
1)shuffle map task数量小于
spark.shuffle.sort.bypassMergeThres
hold=200参数的值。
2)不是聚合类的shuffle算子(比如
reduceByKey).
同普通机制基本类同,区别在于,写入磁盘临时文件的时候不会在内存中进行排序而是直接写,最终合并为一个task一个最终文件,所以和普通模式IDE区别在于:
第一,磁盘写机制不同;
第二,不会进行排序。
也就是说,启用该机制的最大好处在于shuffle write过程中,不需要进行数据的排序操作,也就节省掉了这部分的性能开销

SortShuffle与hashShuffle对比

1.SortShuffle对比HashShuffle可以减少很多的磁盘文件以节省网络IO的开销
2.SortShuffle主要是对磁盘文件进行合并来进行文件数量的减少,同时两类Shuffle都需要经过内存缓冲区溢写磁盘的场景.所以可以得知,尽管Spark是内存迭代计算框架,但是内存迭代主要在窄依赖中.在宽依赖(Shuffle)中磁盘交互还是一个无可避免的情况.
所以,我们要尽量减少Shuffle的出现,不要进行无意义的Shuffle计算.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值