MapReduce处理流程一

 

 

我试图着搞明白MapReduce的处理流程--或者叫运行流程。

 

1、先从单机的角度 粗粒度的看

hadoop 边数据 hadoop数据处理流程_大数据

 

数据处理程序 读入数据,进而进行数据处理,处理完成后写数据。

整体上看很简单,就三步:从源头读入数据、处理数据、写数据到目的地。

 

 

2、更细化的图

 

hadoop 边数据 hadoop数据处理流程_数据_02

 

从1中的图我们大体能明白总体的流程,这是最简单模型。实际运行中并不是单机运行的,而是在分布式的多台机器上并行执行的。

     2.1 多个机器并行执行:  问题就来了,分布式环境下多个机器如何访问共享文件。当然我们已经知道

                                              Hadoop下是使用 HDFS处理的。所以我们看到 2 中的图的左边画出了 HDFS

                                              的一个框。多个机器读取的源数据都是存在于 HDFS上的。

 

      2.2 并行执行之切分 :并行执行 肯定要切分任务--- 把源数据切分为多个小块--也就是图中画的 data split

                                          这个切分是由 InputFormat完成的。

 

      2.3 并行执行的多个map: 这里的多个map处理--是多个进程。

                                                 Hadoop采用都是多进程模型。spark采用的是多线程模型。

                                                 多进程更容易控制资源占用,而多线程不太容易控制资源占用。

 

      2.4 shuffle & sort  : 多map产生的多个 中间结果进行进一步的处理。shuffle 意思为 洗牌---很形象。

 

      2.5 进行reduce处理:对map的结果进行汇总操作。根据key 使用哈希算法 ,把不同的key的数据发送给

                                         不同的reduce进行处理。

 

      2.6 上面图中的一个问题: 应当是一个 split 对应一个  map 的。

 

 

 

3、显示更多细节

 

hadoop 边数据 hadoop数据处理流程_并行执行_03

 
                3.1 每个map处理时 都有自己的 内存缓冲区,默认大小是100M ,就是上图画的buffer in memory

                       部分。buffer--缓冲,缓冲一般是临时存储的,快要满时是要写到磁盘上的。占用的80%时会把

                       这占用的80%的数据写入磁盘。

                 

                3.2   map一直运行 就会一直往 buffer写放数据,buffer就会写到磁盘多个小文件。就是上面buffer

                         后面 画出来的 一摞三个框的 东西。我们看 每个框好像还有自己的结构。一个框中被竖线分

                         割成了多个 “区”。这里的区就是partition。相对于数钱的例子的话,这里的 一个partition就一

                         一沓相同面值的钱--10块的一沓 50 的一沓  100 的一沓,这三沓摞一块就是图中的一个小文

                         件。  为什么他们会整齐的分沓摞起来呢?--- 原来 buffer在向磁盘写文件时 并不是简单的原

                         样的把内容的中数据写入磁盘文件,而是写的时候有一个排序的过程。正式这个排序的处理

                          才是10块的汇聚到一沓里。

 

                 3.3  产生的多个 小文件并不会直接发送给 reduce处理,而是要再合并处理。同样这次合并也不是

                         原样的append。而是有一个归并排序的处理。把 各个一小沓10块的  汇聚成一大沓。

                         然后合并后产生的文件就是一个大的有序的文件。

                 

                  3.4  多个map最终会产生多个merge后的文件。然后从 这多个merge后的文件中 取出相同 一沓10

                         块的发送( 实际上就是copy到reduce节点机器上)给 处理10块的钱的 reduce。