Я пытался запустить вариант примера WordCount, вариант, Mapper выводит текст как ключ и текст как значение, а выходы редуктора Текст как ключ и NullWritable как значение.hasoop mapreduce job does not run reducer
Кроме карты, сократить подписи, я поставил основной метод, как это:
//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(), код которого описан, но что осталось? Я не вижу, какая информация необходима для конфигурации Job.
спасибо,
'' v "' также не относится к типу Текст, он должен быть написан как 'new Text (" v ")'. Его картограф имеет ту же проблему, что и путаница 'long' со строкой. –
«v» часть была второй версией моей дикой попытки сделать редуктор работать, но я согласен ... спасибо за указание :) – user2325080
проблема решена :) большое спасибо – user2325080