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

sqserrrh  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(403)

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

ecbunoof1#

您的输入格式扩展了mapreduce包的inputformat(它扩展而不是实现,并且签名与新api的签名匹配),但是您的作业配置使用的是旧api(jobconf而不是job)。
因此,您需要修改自定义输入格式以实现inputformat(o.a.h.mapred.inputformat),或者修改作业配置以使用新的api(job)

ibps3vxo

ibps3vxo2#

嘿,我也遇到了同样的问题,然后我使用了org.apache.hadoop.mapreduce中的类,而不是org.apache.hadoop.mapred,这是一个新旧api的问题,因此不要使用jobconf配置,只使用jobconfiguration。。。

相关问题