MapReduce的Shuffle原理

MapReduce的Shuffle原理示意图

这里写图片描述

HDFS是数据存储的位置。MapReduce是基于HDFS或HBase之上的。MapReduce分为map和reduce两个过程。可以这么理解,map把数据拢过来,然后以键值对的形式发给reduce,reduce将相同的键合并,并输出。而map和reduce之间的过程就是shuffle过程。
从图中可以看出,数据都是分片的,而一个split对应一个map,map读入数据之后,将数据向环形缓冲区内写,缓冲区默认为100M,当达到阈值80%的时候,那百分之80会被锁住,不让map向内写入,map只能向那20%写入数据,而那80%已经写满的数据会向磁盘溢出。当剩余那20%被写满,而80%也没有溢出完成,那么map会被阻塞直到完成。在向磁盘溢出文件之前,数据会经历partition(分区,默认为哈希算法),会根据reduce的数量或hadoop属性设定reduce任务数参与分区的计算。在每个分区中,数据会进行一个sort(排序)操作,是快速排序,第一关键词为分区号,第二关键词为key。
缓冲区不断向磁盘溢出,这样会产生一个一个的spill file(小文件)。这些文件会在Map任务全部结束之前,进行归并排序,合成一个已经分区排序好的大文件。map任务执行完成后,直接通知应用程序master,reduce任务会通过心跳机制定时通过RPC向应用程序master询问map任务是否完成,以便通过map输出的位置,按分区指定拖拽回自己需要的数据至本地相应磁盘上分区内。因为有多个map,所以reduce会拖拽很多数据,这些数据会两两合并,然后都被reduce接收。
这样Shuffle过程就结束了。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值