分享

关于MapReduce的setOutputKeyClass的问题

ld512870 发表于 2016-3-26 17:37:12 [显示全部楼层] 回帖奖励 阅读模式 关闭右栏 1 9229
今天写了一个MapReduce程序,报错如下: Type mismatch in value from map: expected org.apache.hadoop.io.FloatWritable, received org.apache.hadoop.io.LongWritable。
知道这是设置的Map输出和配置的不匹配错误。
找了一下,发现是:
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(FloatWritable.class);

如果这两个配成map函数的输出类型就正确了,我一直以为是配的reduce类型呢。。。
后来发现还有:
//                job.setMapOutputKeyClass(Text.class);
//                job.setMapOutputValueClass(LongWritable.class);

这两个,如果把这两个配上,然后再把上面两个配置Reduce的就不报错了。
我的理解是:
如果不配置map的输出类型,setOutputKeyClass和setOutputValueClass就是map的输出,如果配上了map的输出,
也就是setMapOutputKeyClass和setMapOutputValueClass,然后setOutputKeyClass和setOutputValueClass就是reduce的输出了?
是这样吗?
但问题是。。。我把setMapOutputKeyClass和setMapOutputValueClass这俩配成map之后。。。我再配setOutputKeyClass和setOutputValueClass,这两个是什么类型都不报错了。。。是因为不如上面那个优先级高吗?不起作用了

已有(1)人评论

跳转到指定楼层
leo_1989 发表于 2016-3-26 20:48:54
这个问题确实不简单,不过楼主可以看下输出数据类型。这个问题就明了了。

一般来讲
mapJoinJob.setMapOutputKeyClass(Text.class);

mapJoinJob.setMapOutputValueClass(SimItem.class);


这两个方法是map端输出的数据类型,这是毋庸置疑的。


另外两个,楼主可以看下reduce输出,数据类型到底是什么样子的
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条