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方法中的逻辑操作;

浙公网安备 33010602011771号