MapReduce运行流程分析

研究MapReduce已经有一段时间了。起初是从分析WordCount程序开始,后来开始阅读Hadoop源码,自认为已经看清MapReduce的运行流程。现在把自己的理解贴出来,与大家分享,欢迎纠错。

还是以最经典的WordCount程序作为基础,来分析map阶段、reduce阶段和最复杂的shuffle阶段。

文本1:hello world                                      文本2:map reduce

hello hadoop                                              java interface

abc qaz                                                      java hdfs

     java jvm                                                    spark storm

这样的2个小文本文件(不足64M),肯定会产生2个map任务,reduce任务默认是1个。当然,map任务和reduce任务的个数都可以在程序中或者配置文件中人为设置。为了说明partition的过程,我们把reduce任务的个数设为2。

1、map阶段

map1                                                            map2

输入:<xxxx, hello world>                                          <xxxx, map reduce>

<xxxx, hello hadoop>                                        <xxxx, java interface>

    <xxxx, abc qaz>                                              <xxxx, java hdfs>

    <xxxx, java jvm>                                              <xxxx, spark storm>

切分:<hello, 1>                                                          <map, 1>

<word, 1>                                                          <reduce, 1>

   <hello, 1>                                                          <java, 1>                 

   <hadoop, 1>                                                      <interface, 1>

   <abc, 1>                                                            <java, 1>

   <qaz, 1>                                                            <hdfs, 1>

   <java, 1>                                                            <spark, 1>

   <jvm, 1>                                                            <storm, 1>

2、shuffle阶段

切分完毕后,每一组<key, value>都会不断地被collect到一个内存缓冲区中,对应代码中的数据结构MapOutputBuffer。

partition过程:每一组<key, value>在被收集的时候,就已经确定了分区(partition),即在这个时候就已经确定了要交给哪个reduce任务处理。分区会给<key, value>加上一个索引标识。假设分区后(分区算法可以设定,默认是hash值模运算),数据如下:reduce1的标识是0,reduce2的标识是1                                                                                           

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/13813.html