Shuffle和排序

shuffle和排序
MapReduce确保每个Reducer的输入都按照键排序。系统执行排序的过程--将map输出作为输入传给reducer--称为shuffle。
Map端
每个Map任务都有一个Ring Buffer,用于存储任务的输出。一旦Buffer内容达到阈值,一个后台线程便开始把内容写到磁盘中(按轮询方式写到指定子目录下)。在写磁盘过程中,map输出继续被写到缓冲区,但如果在此期间Buffer被写满,Map会阻塞直到写磁盘过程完成。
在写磁盘之前,线程首先根据目标Reducer将数据划分成相应的分区,并按键进行内排序,如果有一个combiner,它会在排序后的输出上运行。运行Combiner的意义在于使map输出更紧凑,使得写到本地磁盘和传给reducer的数据更少。
Reduce端
reducer如何知道从哪个tasktracker取得map输出?
map任务成功完成后,会通过heartbeat机制通知其父tasktracer状态已更新,然后tasktracer进而通知jobtracker。因此,对于指定Job,JobTracker知道map输出和tasktracker之间的映射关系。reducer中的一个线程定期询问JobTracker以便获取Map输出的位置,直到它获得所有输出位置。

每个map任务的完成时间可能不同,因此只要有一个任务完成,reduce任务就开始复制其输出。这就是reduce任务的复制阶段。如果map输出相当小,则会被复制到reduce tasktracker的内存,否则,map输出被复制到磁盘。
复制完所有map输出,reduce任务进入排序阶段。这个阶段将合并map输出,维持其顺序排序。这是循环进行的。
在最后阶段,即reduce阶段,直接把数据输入reduce函数。在reduce阶段,对已排序输出中的每个键都要调用reduce函数。此阶段的输出直接输出到HDFS。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值