当Map和Reduce类必须分别扩展需要添加<InputKeyClass, InputValueClass, OuputKeyClass, OutputValueClass>
的Mapper和Reducer类时,为什么我们需要在MapReduce作业中显式设置OutputKey/InputKey类?
一个例子:
JobConf:
job.setOutputKeyClass(NullWritable.class);
job.setOutputValueClass(Text.class);
job.setOutputFormatClass(TextOutputFormat.class);
减速器:
public static class ComputeReducer extends
Reducer<Text, Text, NullWritable, Text> {
如果我们已经显式地设置reducer类来扩展'Reducer <Text, Text, NullWritable, Text>'
,那么为什么需要传递OutputKey/value类?
您必须这样做,因为在java中,所有通用信息在运行时都会丢失。