MapReduce过程详解
MapReduce的过程可以分为Sort, Partition, Shuffle, Combine, Merge等子阶段。
- 第一步 Map - 把输入文件的内容分解,如果是WordCount则分解为单词和1。
- 第二步 Partition - 有时候会有多个Reducer,Partition就是提前对输入进行处理,根据将来的Reducer进行分区. 到时候Reducer处理的时候, 只需要处理分给自己的数据就可以了。
- 主要的分区方法就是按照Key 的不同,把数据分开,其中很重要的一点就是要保证Key的唯一性, 因为将来做Reduce的时候有可能是在不同的节点上做的, 如果一个Key同时存在于两个节点上, Reduce的结果就会出问题, 所以很常见的Partition方法就是哈希。
- 第三步 Sort - 每个partition里面的条目都按照Key的顺序做了排序。
- 第四步 Combine - Combine 其实可以理解为一个mini Reduce 过程, 它发生在前面Map的输出结果之后, 目的就是在结果送到Reducer之前先对其进行一次计算, 以减少文件的大小, 方便后面的传输。
- 就是把自己Partition里面的数据先进行一次排重计数。
- 第五步 Copy - Reducer节点通过http的方式向各个mapper节点下载属于自己分区的数据。
- 第六步 Merge - Reducer节点对不同Mapper拉过来的数据进行合并。
- 第七步 Reduce - 根据每个文件中的内容最后做一次统计。
MapReduce最主要的三个过程是:
- Map:数据输入,做初步的处理,输出形式的中间结果;
- Shuffle:按照partition、key对中间结果进行排序合并,输出给reduce线程;
- Reduce:对相同key的输入进行最终的处理,并将结果写入到文件中。
http://matt33.com/2016/03/02/hadoop-shuffle/
https://changsiyuan.github.io/2015/04/01/2015-4-1-mapreduce/