Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2291433
  • 博文数量: 266
  • 博客积分: 5485
  • 博客等级: 大校
  • 技术积分: 3695
  • 用 户 组: 普通用户
  • 注册时间: 2007-06-20 11:05
个人简介

多读书,多做事,广交朋友,趣味丛生

文章分类

全部博文(266)

分类: 云计算

2013-05-30 12:00:40

原始状态下,输入–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

 


阅读(8707) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~