Spark 的 hash shuffle 和 sort shuffle

Shuffle是MR的核心和最重要的地方,也是性能弹性最大的地方

在Spark中,1.1版本之前,框架默认采用的shuffle是hash,1.1之后,默认采用了sort

从下图可以看出在数据量小,mapper和reducer都比较小的时候,二者的性能几乎一样,当数据量大的情况下,sort shuffle的性能明显好一些

 

shuffle的中文意思是“洗牌”

在这里是将拥有一类特性的数据进行分类,成为有相同特征的数据汇聚到一个节点上,再进行后续的计算,这就是shuffle

这里讲的相同特征,就比如说key相同,或者key都满足小于10的条件等

 

对于hash shuffle

就是说对于数据的特征,分片策略采用hash code的方式来进行,简单暴力直接,如果后续的stage需要有10个reducer,那么直接按10取模,数据就分好了。

如果当前的stage的task是5,那么每个task会对应10个reducer,这样会将5个结果文件,分为50个小文件存储在磁盘上,后续的stage直接来取50个小文件就完毕,这是初级hash shuffle

这个带来的问题就是磁盘IO太多,内存可能溢出

所以一般会将50个结果文件进行一个consolidate,原则是产生当前executor的cpu数*10个文件,存储在磁盘,比如是2个core的机器,那么只产生20个文件,这就是优化的hash shuffle

 

对于sort shuffle

对生成的结果进行排序,然后生成小文件,再对小文件进行总的归并排序,生成一个大文件和一个索引文件,存储在磁盘上面

这样磁盘IO做到最小,索引文件保证了reducer的读取效率

所以生成的文件数量为2*mapper的task数量,在本文的例子中,就是2*5=10个

转载于:https://www.cnblogs.com/jackie2016/p/5728666.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值