2017-02-16 4 views
0

に私は、Mavenプラグインを使って日食でのHadoopと連携 と私はマップが機能を削減連鎖をやろう、と第2のマップでは、私は、入力ファイルクラスとして KeyValueTextInputFormat.classを使用しますTextInputFormat.classの代わりに使用します。私はLongWritableではないマップでキーとして "テキスト"を渡したいと思います。 そして、私はこの例外が発生したとき、私はここでそれを見つけたすべてのソリューションをstackoverflowで試しました。例外は、Hadoopの

Exception in thread "main" java.lang.IncompatibleClassChangeError: Found class org.apache.hadoop.mapreduce.JobContext, but interface was expected 
    at org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat.isSplitable(KeyValueTextInputFormat.java:52) 
    at org.apache.hadoop.mapreduce.lib.input.FileInputFormat.getSplits(FileInputFormat.java:246) 
    at org.apache.hadoop.mapred.JobClient.writeNewSplits(JobClient.java:885) 

ドライバー・クラス:

Configuration conf = new Configuration(true); 

    // Create job1 
    Job job1 = new Job(conf, "job1"); 
    job1.setJarByClass(Mapper1.class); 
    job1.setMapperClass(Mapper1.class); 
    job1.setMapOutputKeyClass(ByteWritable.class); 
    job1.setMapOutputValueClass(RowNumberWritable.class); 
    job1.setReducerClass(Reducer1.class); 
    job1.setNumReduceTasks(1); 
    job1.setOutputKeyClass(Text.class); 
    job1.setOutputValueClass(Text.class); 
    FileInputFormat.addInputPath(job1, inputPath); 
    job1.setInputFormatClass(TextInputFormat.class); 
    Path path1 = new Path(out1); 
    FileOutputFormat.setOutputPath(job1, path1); 
    job1.setOutputFormatClass(TextOutputFormat.class); 
    // Delete output if exists 
    FileSystem hdfs = FileSystem.get(conf); 
    if (hdfs.exists(countedPath)) 
     hdfs.delete(countedPath, true); 

    // Execute the job1 
    int code = job1.waitForCompletion(true) ? 0 : 1; 

    // Create job2 
    Job job2 = new Job(conf, "WordPerDocument"); 
    job2.setJarByClass(Mapper2.class); 
    job2.setMapperClass(Mapper2.class); 
    job2.setMapOutputKeyClass(WordDocumentWritable.class); 
    job2.setMapOutputValueClass(Text.class); 
    job2.setReducerClass(Reducer2.class); 
    job2.setOutputKeyClass(Text.class); 
    job2.setOutputValueClass(Text.class); 
    FileInputFormat.addInputPath(job2, path1); 
    job2.setInputFormatClass(KeyValueTextInputFormat.class); 
    Path path2 = new Path(ou2); 
    FileOutputFormat.setOutputPath(job2, path2); 
    job2.setOutputFormatClass(TextOutputFormat.class); 

    code = job2.waitForCompletion(true) ? 0 : 1; 

と私の輸入は、次のとおりです。

import java.io.IOException; 
import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.FileSystem; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.io.ByteWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Job; 
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
import org.apache.hadoop.mapreduce.lib.input.KeyValueTextInputFormat; 
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat; 
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat; 

してください、このクレイジーな例外の誰もが今どんなアイデア:( おかげで、すべての

+0

を使用する必要があります...コードの農産物のどの種類を推測するのはとても難しいですその特定のエラー – ymz

+0

私はドライバクラスを追加します。 – user5532529

+0

インポートを含めることはできますか。おそらくあなたは 'mapred'と' mapreduce'インポートを混在させているでしょう。 –

答えて

0

場合私はこのエラーがこの行によって引き起こされたと考えます。

あなたはそれにいくつかのコードを投稿する必要があります
FileOutputFormat.setOutputPath(job2, path2); 

job2Jobオブジェクトであり、そこに属していない..あなたの代わりにTextOutputFormat.classまたは似たような

+0

ありがとう、私は例外から私が出力ではなく、入力形式のエラーと思うからもっと見ることを意味するものを説明してください。 – user5532529

+0

あなたはそれについて確かですか? – ymz

+0

わかりませんが、私はその問題を、その例外を検索すると思います – user5532529

関連する問題