に私は、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;
してください、このクレイジーな例外の誰もが今どんなアイデア:( おかげで、すべての
を使用する必要があります...コードの農産物のどの種類を推測するのはとても難しいですその特定のエラー – ymz
私はドライバクラスを追加します。 – user5532529
インポートを含めることはできますか。おそらくあなたは 'mapred'と' mapreduce'インポートを混在させているでしょう。 –