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

时间:2013-03-24 12:37:12

标签: hadoop 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);

2 个答案:

答案 0 :(得分:2)

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

因此,您需要修改自定义输入格式以实现InputFormat(o.a.h.mapred.InputFormat),或修改您的作业配置以使用新API(作业)

答案 1 :(得分:0)

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