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 实际

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章