我正在编写MapReduce程序,使用org.apache.hadoop.mapred.*中的类。有人能告诉我这个错误的原因吗?我的CustomInputFormat类扩展了InputFormat,我已经覆盖了createRecordReader方法。
我的CustomInputFormat签名是:
class ParagraphInputFormat extends InputFormat {
@Override
public RecordReader createRecordReader(InputSplit arg0,
TaskAttemptContext arg1) throws IOException, InterruptedException {
return new CustomRecordReader();
}
@Override
public List<InputSplit> getSplits(JobContext arg0) throws IOException,
InterruptedException {
// TODO Auto-generated method stub
return null;
}
}
CustomRecordReader的签名是class CustomRecordReader extends RecordReader
在声明这个类时,我使用了org.apache.hadoop.mapreduce.。我混淆了org.apache.hadoop.mapred。和org.apache.hadoop.mapreduce.*。Eclipse有时会继续显示不推荐的消息。我听说apache添加了一些类,然后删除了这些类,然后又添加了以前的类。是因为这个吗?它会影响我的代码吗?
JobConf conf = new JobConf(new Configuration(),MyMRJob.class);
conf.setJobName("NameofJob");
conf.setOutputKeyClass(CutomeKeyClass.class); //no error to this line
conf.setOutputValueClass(IntWritable.class);
conf.setMapperClass(MYMap.class);
conf.setCombinerClass(MyReduce.class);
conf.setReducerClass(MyReduce.class);
conf.setInputFormat(CustomInputFormat.class);//ERROR to this line while typing
conf.setOutputFormat(IntWritable.class);
FileInputFormat.setInputPaths(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
JobClient.runJob(conf);
您的输入格式扩展了mapreduce包的InputFormat(它扩展而不是实现,并且签名与新api的签名匹配),但是您的作业配置使用的是旧api (JobConf而不是job)。
所以你需要修改你的自定义输入格式来实现InputFormat (o.a.h.mapred.InputFormat),或者修改你的作业配置来使用新的API (job)
嘿,我遇到了同样的问题,然后我使用的类从Org.apache.hadoop.mapreduce而不是org.apache.hadoop.mapred这是新旧API的问题,因此不要使用JobConf配置,只使用Job Configuration…