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过程就结束了。

猜你喜欢

转载自blog.csdn.net/gjwcsdn/article/details/81431179
今日推荐