今天在MapReduce程序时遇到个问题,错误是输出类型错误.
原因:
Job job = Job.getInstance(conf, "TestPartitioner");
job.setJarByClass(TestRecordReader.class);
job.setMapperClass(MyMapper.class);
job.setReducerClass(MyReducer.class);
job.setPartitionerClass(MyPartitinoer.class);
job.setMapOutputKeyClass(LongWritable.class);
job.setMapOutputValueClass(Text.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
// job.setOutputKeyClass(Text.class); 会同时限定map和reduce的输出key格式
// job.setOutputValueClass(IntWritable.class);同理,会同时限定map和reduce的输出value格式
上述代码中setOutoutKeyClass和setOutputValueClass两个方法在没有单独设置map输出格式的情况下会同时指定map和reduce方法的数据输出格式,如果map和reduce的数据输出格式不相同,则需要用setMapOutputKeyClass和setMapOutputValueClass方法单独指定map的数据输出格式,这种情况下setOutoutKeyClass和setOutputValueClass指定的是reduce的数据输出格式.