1

Mapreduceフレームワークを使用していくつかの簡単なコードで咳をしようとしています。以前はmapredパッケージを使用して実装し、入力フォーマットクラスをKeyvalueTextInputFormatとして指定できましたが、mapreduceを使用する新しいApiではこのクラスは存在しません。TextInputFormat.classを使用しようとしましたが、それでも次の例外が発生します

- job_local_0001
java.lang.ClassCastException: org.apache.hadoop.io.LongWritable cannot be cast to org.apache.hadoop.io.Text
    at com.hp.hpl.mapReduceprocessing.MapReduceWrapper$HitFileProccesorMapper_internal.map(MapReduceWrapper.java:1)
    at org.apache.hadoop.mapreduce.Mapper.run(Mapper.java:144)
    at org.apache.hadoop.mapred.MapTask.runNewMapper(MapTask.java:621)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:305)
    at org.apache.hadoop.mapred.LocalJobRunner$Job.run(LocalJobRunner.java:177)

これがコードのサンプルスニペットです

Configuration conf = new Configuration();
         conf.set("key.value.separator.output.line", ",");    

        Job job = new Job(conf, "Result Aggregation");
        job.setJarByClass(ProcessInputFile.class);

        job.setInputFormatClass(TextInputFormat.class);
        job.setOutputFormatClass(TextOutputFormat.class);

        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(Text.class);

        job.setMapperClass(MultithreadedMapper.class);
        MultithreadedMapper.setMapperClass(job, HitFileProccesorMapper_internal.class);
        MultithreadedMapper.setNumberOfThreads(job, 3);
        //job.setMapperClass(HitFileProccesorMapper_internal.class);
        job.setReducerClass(HitFileReducer_internal.class);

        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(Text.class);



        FileInputFormat.addInputPath(job, new Path(inputFileofhits.getName()));
        FileOutputFormat.setOutputPath(job, new Path(ProcessInputFile.resultAggProps
                .getProperty("OUTPUT_DIRECTORY")));

        try {
            job.waitForCompletion(true);
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

クラスキャスト例外を回避するために行う構成変更について教えてください。

4

1 に答える 1

1

これは通常、MapReduceがキー/値としてパススルーしようとしているものと、MapまたはReduceクラスがテンプレート化されているものに型の不一致がある場合に発生します。

を使用していると言いますがKeyvalueTextInputFormat、コードではを使用していますTextInputFormatTextInputFormatレコードを<LongWritable, Text>「position、line」として配信します。

マッパーのタイプはです<Text, Text, ?, ?>。したがって、MapReduceはそれをに与えているLongWritableをキャストしようとしますが、それはできません。そのため、爆破されます。TextInputFormatText

KeyvalueTextInputFormatマッパーのタイプをに変更することをお勧めします<LongWritable, Text, ?, ?>

于 2012-07-18T15:09:29.593 に答える