Note that there are some explanatory texts on larger screens.

plurals
  1. POHadoop: Reducer writing Mapper output into Output File
    primarykey
    data
    text
    <p>I met a very very strange problem. The reducers do work but if I check the output files, I only found the output from the mappers. When I was trying to debug, I found the same problem with the word count sample after I changed the mappers' output value type from Longwritable to Text </p> <pre><code> package org.myorg; import java.io.IOException; import java.util.*; import org.apache.hadoop.fs.Path; import org.apache.hadoop.conf.*; import org.apache.hadoop.io.*; import org.apache.hadoop.mapreduce.*; import org.apache.hadoop.mapreduce.lib.input.*; import org.apache.hadoop.mapreduce.lib.output.*; import org.apache.hadoop.util.*; public class WordCount extends Configured implements Tool { public static class Map extends Mapper&lt;LongWritable, Text, Text, Text&gt; { private final static IntWritable one = new IntWritable(1); private Text word = new Text(); public void map(LongWritable key, Text wtf, Context context) throws IOException, InterruptedException { String line = wtf.toString(); StringTokenizer tokenizer = new StringTokenizer(line); while (tokenizer.hasMoreTokens()) { word.set(tokenizer.nextToken()); context.write(word, new Text("frommapper")); } } } public static class Reduce extends Reducer&lt;Text, Text, Text, Text&gt; { public void reduce(Text key, Text wtfs, Context context) throws IOException, InterruptedException { /* int sum = 0; for (IntWritable val : wtfs) { sum += val.get(); } context.write(key, new IntWritable(sum));*/ context.write(key,new Text("can't output")); } } public int run(String [] args) throws Exception { Job job = new Job(getConf()); job.setJarByClass(WordCount.class); job.setJobName("wordcount"); job.setOutputKeyClass(Text.class); job.setMapOutputValueClass(Text.class); job.setOutputValueClass(Text.class); job.setMapperClass(Map.class); //job.setCombinerClass(Reduce.class); job.setReducerClass(Reduce.class); job.setInputFormatClass(TextInputFormat.class); job.setOutputFormatClass(TextOutputFormat.class); FileInputFormat.setInputPaths(job, new Path(args[0])); FileOutputFormat.setOutputPath(job, new Path(args[1])); boolean success = job.waitForCompletion(true); return success ? 0 : 1; } public static void main(String[] args) throws Exception { int ret = ToolRunner.run(new WordCount(), args); System.exit(ret); } } </code></pre> <p>here are the results </p> <pre><code>JobClient: Combine output records=0 12/06/13 17:37:46 INFO mapred.JobClient: Map input records=7 12/06/13 17:37:46 INFO mapred.JobClient: Reduce shuffle bytes=116 12/06/13 17:37:46 INFO mapred.JobClient: Reduce output records=7 12/06/13 17:37:46 INFO mapred.JobClient: Spilled Records=14 12/06/13 17:37:46 INFO mapred.JobClient: Map output bytes=96 12/06/13 17:37:46 INFO mapred.JobClient: Combine input records=0 12/06/13 17:37:46 INFO mapred.JobClient: Map output records=7 12/06/13 17:37:46 INFO mapred.JobClient: Reduce input records=7 </code></pre> <p>then I found the strange results in the outfile. This problem happened after I changed the output value type of map and input key type of reducer to Text no matter I changed the type of reduce output value or not. I was also forced to change job.setOutputValue(Text.class)</p> <pre><code>a frommapper a frommapper a frommapper gg frommapper h frommapper sss frommapper sss frommapper </code></pre> <p>Help!</p>
    singulars
    1. This table or related slice is empty.
    plurals
    1. This table or related slice is empty.
    1. This table or related slice is empty.
    1. This table or related slice is empty.
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload