MapReduce之输入输出类型

转载:http://blog.csdn.net/lucktroy/article/details/7957120 

话说用hadoop MapReduce编程有一阵子了,但是关于Mapper, Combiner, Reducer的输入输出类型居然花了我一整天。

我本以为Combiner的输入与Mapper的输出一致,Combiner的输出与Reducer的输入一致就可以了,就像图1:


图1 假想

我的程序Mapper输出是<Text, DoubleWritable>; Combiner的输入输出分别是<Text, DoubleWritable>, <Text, Text>; 然后Reducer的输入是<Text, Text>. 

我本想逻辑上都没问题,但事与愿违,老出错. 

在hadoop中,默认的job.setOutputkeyClass(*.class), job.setOutputValueClass(*.class)是针对Mapper与Reducer的,这里因为两者不同,我试着用job.setMapOutputKeyClass(*.class)与job.setMapOutputValueClass(*.class)区分. 但依然有错误. 

在几经周折后,在看完一篇博文“《Data-intensive Text Processing with MapReduce》读书笔记第3章:MapReduce算法设计(1)”后,发现原来Mapper与Combiner的输出均要与Reducer对应(见图2),于是改了过来,终于通过,因为没有看过hadoop源码,所以也不知道它底层具体是如何实现的. 


图2 实际

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值