MapReduce工作原理简介

8750阅读 0评论2013-05-30 qhw
分类:云计算

原始状态下,输入–Map — Shuffle — Reduce — 输出

003850l89zjp6rfyvlffon

假设有如下的两个文本文件来运行WorkCount程序:

Hello World Bye World
Hello Hadoop GoodBye Hadoop

 

map数据输入

Hadoop针对文本文件缺省使用LineRecordReader类来实现读取,一行一个key/value对,key取偏移量,value为行内容。

如下是map1的输入数据:
Key1                  Value1
0         Hello World Bye World

如下是map2的输入数据:
Key1                Value1
0         Hello Hadoop GoodBye Hadoop

map输出/combine输入

如下是map1的输出结果
Key2       Value2
Hello            1
World          1
Bye               1
World          1

如下是map2的输出结果
Key2        Value2
Hello              1
Hadoop         1
GoodBye      1
Hadoop         1

combine输出

Combiner类实现将相同key的值合并起来,它也是一个Reducer的实现。

如下是combine1的输出
Key2         Value2
Hello              1
World            2
Bye                 1

如下是combine2的输出
Key2          Value2
Hello                1
Hadoop           2
GoodBye         1

combiner视业务情况来用,减少MAP->REDUCE的数据传输,提高shuffle速度,就是在map中再做一次reduce操作。combiner使用的合适,可以在满足业务的情况下提升job的速度,如果不合适,则将导致输出的结果不正确。

对于wordcount来说,value就是一个叠加的数字,所以map一结束就可以进行reduce的value叠加,而不必要等到所有的map结束再去进行reduce的value叠加。

 

reduce输出

Reducer类实现将相同key的值合并起来。

如下是reduce的输出
Key2               Value2
Hello                     2
World                   2
Bye                        1
Hadoop               2
GoodBye             1
即实现了WordCount的处理。

下图是官方的流程图:

003900rhr4g1trt77mt4bd

 


上一篇:Static与线程安全
下一篇:Krug可用性三大定律