MapReduce之输入输出类型

来源:互联网 发布:淘宝职业差评师团队 编辑:程序博客网 时间:2024/06/10 08:10

话说用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 实际