我正在编写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);
2条答案
按热度按时间ecbunoof1#
您的输入格式扩展了mapreduce包的inputformat(它扩展而不是实现,并且签名与新api的签名匹配),但是您的作业配置使用的是旧api(jobconf而不是job)。
因此,您需要修改自定义输入格式以实现inputformat(o.a.h.mapred.inputformat),或者修改作业配置以使用新的api(job)
ibps3vxo2#
嘿,我也遇到了同样的问题,然后我使用了org.apache.hadoop.mapreduce中的类,而不是org.apache.hadoop.mapred,这是一个新旧api的问题,因此不要使用jobconf配置,只使用jobconfiguration。。。