MapReduce运行流程分析(4)

                                             <qaz, 1>                  1                                          <spark, 1>                        0

                                             <word, 1>                1                                          <storm, 1>                      1

merge过程:一个map所有的溢写文件都会进行合并,产生一个最终的溢写文件和一个索引文件。合并是针对于不同的溢写文件中相同分区的数据。在这个合并的过程中,也会进行combine操作(如果设置了的话),此处的combine过程同上,不再细说。

copy数据过程:每个reduce任务会远程copy属于自己的多个map输出数据文件,通过http传输,在本地会合并。另外,这个过程也会进行combine,此次不过多说明。

结果如下:                       

reduce0                        reduce1

<abc, 1>                    <hadoop, 1>

                      <hello, 2>                    <jvm, 1>

<java, 1>                    <qaz, 1>

                      <java, 2>                    <word, 1>


                                                                  <map, 1>                    <hdfs, 1>

<spark, 1>                  <interface, 1>

<reduce, 1>

<storm, 1>

sort过程:对上述结果进行排序,结果如下:

reduce0                        reduce1

<abc, 1>                    <hadoop, 1>

                       <hello, 2>                    <hdfs, 1>

<java, 1>                    <interface, 1>

                        <java, 2>                    <jvm, 1>

<map, 1>                    <qaz, 1>

<spark, 1>                  <reduce, 1>

<storm, 1>

<word, 1>

3、reduce阶段

通过一个GroupComparator对key进行比较,相同的key(比较结果为0,比较算法可以定制),会被放到一个集合的迭代器中,然后迭代进行一次reduce运算,产生一个输出。类似combine过程。


                            最终的输出:                    reduce0                        reduce1

<abc, 1>                    <hadoop, 1>

                       <hello, 2>                    <hdfs, 1>

<java, 3>                    <interface, 1>

                         <map, 1>                    <jvm, 1>

<spark, 1>                  <qaz, 1>

<reduce, 1>

<storm, 1>

<word, 1>

从上述过程的分析可以看出,合并和排序是核心!!!

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

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