话说用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)与