我正在编写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);
答案 0 :(得分:2)
您的输入格式扩展了mapreduce包的InputFormat(它扩展而不是实现,签名与新api的签名匹配),但您的作业配置是使用旧的API(JobConf而不是Job)。
因此,您需要修改自定义输入格式以实现InputFormat(o.a.h.mapred.InputFormat),或修改您的作业配置以使用新API(作业)
答案 1 :(得分:0)