MapReduce工作原理

作者:naven

Map-Reduce框架的运作完全基于<key,value>对,即数据的输入是一批<key,value>对,生成的结果也是一批<key,value>对,只是有时候它们的类型不一样而已。Key和value的类由于需要支持被序列化(serialize)操作,所以它们必须要实现Writable接口,而且key的类还必须实现WritableComparable接口,使得可以让框架对数据集的执行排序操作。

一个Map-Reduce任务的执行过程以及数据输入输出的类型如下所示:

(input)<k1,v1> -> map -> <k2,v2> -> combine -> <k2,v2> -> reduce -> <k3,v3>(output)

下面通过一个的例子并结合源代码来详细说明这个过程

3.1       WordCount示例

这也是Hadoop自带的一个例子,目标是统计文本文件中单词的个数。

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

 

 

Hello World Bye World

 

 

Hello Hadoop GoodBye Hadoop

 

3.2       map数据输入

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

如下是map1的输入数据:

Key1Value1
0Hello World Bye World

如下是map2的输入数据:

Key1Value1
0Hello Hadoop GoodBye Hadoop

3.3       map输出/combine输入

如下是map1的输出结果

Key2Value2
Hello1
World1
Bye1
World1

如下是map2的输出结果

Key2Value2
Hello1
Hadoop1
GoodBye1
Hadoop1

3.4       combine输出

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

如下是combine1的输出

Key2Value2
Hello1
World2
Bye1

如下是combine2的输出

Key2Value2
Hello1
Hadoop2
GoodBye1

3.5       reduce输出

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

如下是reduce的输出

Key2Value2
Hello2
World2
Bye1
Hadoop2
GoodBye1

即实现了WordCount的处理。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值