私はWordCountの例のバリエーションを実行しようとしていました.バリエーションは、MapperがTextをキーとして出力し、Textを値として出力し、ReducerがTextをキーとして出力し、NullWritableを値として出力します。
マップに加えて、署名を減らし、メインメソッドを次のように配置します。
//start a conf
Configuration conf = new Configuration();
conf.set("str",str);
//initialize a job based on the conf
Job job = new Job(conf, "wordcount");
job.setJarByClass(org.myorg.WordCount.class);
//the reduce output
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(NullWritable.class);
//the map output
job.setMapOutputKeyClass(Text.class);
job.setMapOutputValueClass(Text.class);
//Map and Reduce
job.setMapperClass(Map.class);
job.setReducerClass(Reduce.class);
//take hdfs locations as input and output
job.setInputFormatClass(TextInputFormat.class);
job.setOutputFormatClass(TextOutputFormat.class);
FileInputFormat.addInputPath(job, new Path(args[0]));
FileOutputFormat.setOutputPath(job, new Path(args[1]));
//run the job
job.waitForCompletion(true);
デバッグするには、マップ関数を次のように配置します
map(LongWritable key, Text value, Context context){
.........
context.write("1000000","2");
}
コードを次のように削減します
reduce(Text key, Iterable<Text> values, Context context){
.......
context.write("v",NullWritable.get());
}
ただし、出力で表示されるのはマップ出力だけです。レデューサーはコンパイルされますが、呼び出されません! コードが記述されている main() メソッドに何かが欠けている可能性があると思いますが、何が残っていますか? ジョブ構成にさらに必要な情報がわかりません。
ありがとう、