MapReduce运行流程简单理解

MapReduce作为大数据中的分布式运算框架是很重要的一部分。它的简单的流程如下:

Map阶段:

一、读取自己设置的路径中的文件的数据(默认读取文件中的数据,也可以读取其他的数据),读取数据默认是一行行的读取的;

二、每读取一行数据都会执行map方法中的业务逻辑来处理读取的数据,并将数据使用context.write()方法写到下一执行步骤;

三、此时,从map方法中写数据过程中,此过程是将数据先write到一个环形缓冲区(其实就是开辟的一部分内存空间),输出到缓冲区中的数据会进行排序(快排);

四、当输入到此缓冲区中的数据达到总缓冲区的0.8的时候,此时开始进行spill一些操作,就是将缓冲区中的数据刷到机器的磁盘中;

五、在spill过程中可能会溢出多个spill文件,然后多个spill文件会进行merge合并操作;

注意:在溢出过程和合并过程中都会调用partition进行分组和针对key进行排序;

 

Reduce阶段:

六、在map阶段的过程中每个maptask完成后会通知appmaster此map任务完成了;

七、reduce会和appmaster进行通信,若有map任务完成则会重完成的maptask的机器上拉取数据,这个过程可能会设置有多个reduce个数,则每个reduce会根据自己的分区号到对应的maptask机器上拉取对应的分区数据;

八、此时,reduce端会将map端的分区和排序后的文件拉取过来再进行合并并归并排序;

九、reduce端将文件合并成大文件后,shuffle过程也就结束了,然后开始一个一个去处键值对进行分组,接着执行reduce方法中的逻辑操作;

 

posted @ 2018-09-07 20:05  阿路灬  阅读(439)  评论(0)    收藏  举报