spark——Shuffle模块详解

本文详细介绍了Spark的Shuffle过程,包括Mapper端和Reducer端的工作原理。重点讨论了Hash Based Shuffle Write及其问题,如文件过多导致性能下降,以及Spark如何通过引入Shuffle Consolidate Writer进行改进。接着,文章转向了Sort Based Shuffle Write,这是Spark当前的默认选项,它通过减少文件生成和优化排序提高性能。
摘要由CSDN通过智能技术生成

将数据打乱重新分配到不同节点上的过程就是shuffle。Shuffle的目的就是将具有共同的特征的数据汇聚在同一个节点上来处理,比如hadoop的reduce还有排序等作用。当然并不是所有的shuffle过程都有排序,甚至为了减少排序带来不必要的开销,spark最初的框架中用的Hash Based Shuffle Write就是这样设计的,没有排序。
Spark集群Shuffle分为2部分:Mapper端和Reducer端。Mapper端:通过Cache不断的把数据写入到文件系统中并汇报给Driver。Reducer端:把相同的Key放在同一个Task中,并进行业务逻辑的操作。Reducer端抓数据的时候也有一个小的缓存区。Mapper端有一个缓存,根据Redcuer端的需要,对数据分成不同的部分,然后在Reducer端抓到属于自己的数据进行reduce操作,把相同Key的数据Pull过来以后进行reduce操作。

1.Hash Based Shuffle Write
其实在很多计算场景中并不需要排序,排序后反而会带来一些不必要的开销。Executor上执行Shuffle Map Task时调用RunTask,从sparkEnv中获取到manager,从manager中获取write,将对RDD计算的中间结果持久化,就是在本地存起来,这样下游的Task直接调用中间结果就可以了,之前也提到过这样也拥有了不错的容错机制,恢复数据的时候不必要重新计算所有的RDD。当然map端也可以对中间的结果进行一些操作,比如聚合等,然后再存入本地,以便之后的Task进行调用。
这里有一个重要的实现也最终成为Hash Bashed Shuffle Write被替换掉默认选项的原因,就是每个Shuffle Map Task对每一个下游的partition都生成一个

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值