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 (Job ではなく JobConf) を使用しています。

そのため、カスタム入力形式を修正して InputFormat (oahmapred.InputFormat) を実装するか、ジョブ構成を修正して新しい API (Job) を使用する必要があります。

于 2013-03-24T15:29:53.230 に答える