MapReduce过程详解

关于MapReduce的详细过程一直不是很懂,看了很多资料也是云里雾里的,不过还是找到两篇不错的文章:

自己尝试将上面两篇文章结合起来,并依据自己的实践来进行一些注解;

mapreduce workflow
MapReduce总体流程

0. 综述

整个MapReduce过程总共分为七个步骤,分别是Map/Partition/Sort/Combine/Copy/Merge/Reduce。简单来说,Map对文件进行切分,Partition将文件根据一定条件放到不同的桶中,Sort对桶中的数据进行排序,Combine对桶中的数据进行一次合并,以减少数据的传输消耗,Copy是将桶中的数据分发到各个不同的Reduce节点上,Merge是在Reduce节点上对来自不同桶中的数据进行一次合并,Reduce对合并之后的文件进行处理;

1. Map

拆解,在此阶段可以定义mapper脚本程序,处理文件,得到mapper的输出;

2. Partition

分区,分区的原因在于,有时候会有多个Reducer, Partition就是提前对输入进行处理,将同类数据放到一个区中,可以在hadoop脚本中自定义如何做Partition,比如按照输入数据的第1列做partition,那么第一列相同的数据会被分到同一个Partition中去,同一个Partition中第一列的值可能有多个,但是第一列值相同的数据不会出现在多个Partition中。

3. Sort

排序,对每一个分区的数据进行排序,可以在hadoop脚本中自定义如何做Sort,即指定字段分隔符以及以哪几个字段作为排序的key。如果不指定,则默认以整行为key,value默认为空;

4. Combine

Combine可以理解为一个mini Reduce过程,它发生在前面Map的输出结果之后, 目的就是在结果送到Reducer之前先对其进行一次计算,以减少文件的大小,方便后面的传输。但这步也不是必须的。

5. Copy

Copy阶段,把输出结果传送给Reducer,通过http的方式, 由Reducer节点向各个mapper节点下载属于自己分区(Partition)的数据。

6. Merge

此时Reducer得到的文件是从不同Mapper那里下载到的,需要对他们进行合并为一个文件(猜想可能是一个Merge Sort的过程,因为最后输出到Reducer的也都是排好序的);

7. Reduce

运行Reducer程序对数据进行处理,然后输出,有多少个Reducer就会输出多少个结果文件,一般的命名方式是part-000xx;

总结:

Partition, Sort, Combine, Copy, Merge等. 而这些过程往往被统称为”Shuffle” 也就是 “混洗”. 而Shuffle的目的就是对数据进行梳理,排序,以更科学的方式分发给每个Reducer,以便能够更高效地进行计算和处理。 整个MapReduce过程中其实包含两次Sort,一次在Partition之后进行Sort,一次是在Merge的时候进行Sort,将不同的Partition混合到一个Reducer中进行一次Merge Sort;

hadoop中的参数详解

此条目发表在Linux分类目录。将固定链接加入收藏夹。

发表评论