Mapreduec流程之Shuffle过程详解

本文详细探讨MapReduce中神秘且复杂的Shuffle阶段,包括map-shuffle、fetch和reduce-shuffle三个部分。从maptask的输出如何进入环形缓冲区,到数据分区、排序、溢出到磁盘,再到reduce阶段的拉取、归并和排序,揭示了Shuffle阶段的工作原理。同时指出,磁盘操作是导致MapReduce计算速度较慢的原因,而在Hadoop3.x中有显著的性能提升。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

作为整个Mapreduce中最为神秘,复杂的部分,恰恰是平时业务中最经常接触的地方。仅仅依靠map和reduce阶段的业务代码编辑,是不能满足平时的业务需要的。真正的业务处理中,经常会涉及到自定义partition,sort,groupcomparator等情况。而只有了解清楚了shuffle阶段是怎么运行的,才能更好的帮助我们按需修改mapreduce中的各个组件。

废话不说,直接进入主题!

Shuffle阶段,详细的来说可以分为三个部分:map-shuffle,fetch和reduce-shuffle。整个shuffle阶段的开始是从map输出键值对开始,到reduce阶段接受键值对之前。

name我们就从第一个阶段map-shuffle开始说起。通过查阅maptask的源码,我们知道,context.write方法其实等价于output.write方法,而output.write方法其实是调用了底层的collector的collect方法,该方法有三个参数,分别为:key,value 和getPartition的返回值---reducetask的个数。通过collector对象,我们发现mapOutputCollector的父类mapOutputBuffer实现了一个很复杂的功能,就是我们常说的环形缓冲区。由此可以得出,从maptask出来的数据全部都进入了这个环形缓冲区当中。下面我们来具体聊下这个环形缓冲区的作用。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值