如何在MapReduce中设置自定义输入格式



我正在编写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…

相关内容

  • 没有找到相关文章

最新更新