0

我正在编写 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);
4

2 回答 2

2

您的输入格式扩展了 mapreduce 包的 InputFormat(它扩展而不是实现,并且签名与新 api 的签名匹配),但您的作业配置使用旧 API(JobConf 而不是 Job)。

因此,您要么需要修改自定义输入格式以实现 InputFormat (oahmapred.InputFormat),要么修改作业配置以使用新的 API (Job)

于 2013-03-24T15:29:53.230 回答
0

嘿,我遇到了同样的问题,然后我使用了 org.apache.hadoop.mapreduce 中的类而不是 org.apache.hadoop.mapred,这是新旧 API 的问题,为此不要使用 JobConf 配置,仅使用 Job 配置.. .

于 2014-05-27T05:27:24.453 回答