多读书,多做事,广交朋友,趣味丛生
分类: 云计算
2013-05-30 12:00:40
原始状态下,输入–Map — Shuffle — Reduce — 输出
假设有如下的两个文本文件来运行WorkCount程序:
Hello World Bye World
Hello Hadoop GoodBye Hadoop
Hadoop针对文本文件缺省使用LineRecordReader类来实现读取,一行一个key/value对,key取偏移量,value为行内容。
如下是map1的输入数据:
Key1 Value1
0 Hello World Bye World
如下是map2的输入数据:
Key1 Value1
0 Hello Hadoop GoodBye Hadoop
如下是map1的输出结果
Key2 Value2
Hello 1
World 1
Bye 1
World 1
如下是map2的输出结果
Key2 Value2
Hello 1
Hadoop 1
GoodBye 1
Hadoop 1
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叠加。
Reducer类实现将相同key的值合并起来。
如下是reduce的输出
Key2 Value2
Hello 2
World 2
Bye 1
Hadoop 2
GoodBye 1
即实现了WordCount的处理。
下图是官方的流程图: