2012-10-01 15 views
5

सभीहाडोप रेड्यूसर को

मेरे पास सरल नक्शा/कार्यान्वयन को कम किया गया है। मैपर को बुलाया जाता है और यह अपनी नौकरी करता है लेकिन reducer कभी नहीं कहा जाता है।

यहाँ नक्शाकार है:

static public class InteractionMap extends Mapper<LongWritable, Text, Text, InteractionWritable> { 

    @Override 
    protected void map(LongWritable offset, Text text, Context context) throws IOException, InterruptedException { 
     System.out.println("mapper"); 
     String[] tokens = text.toString().split(","); 
     for (int idx = 0; idx < tokens.length; idx++) { 
      String sourceUser = tokens[1]; 
      String targetUser = tokens[2]; 
      int points = Integer.parseInt(tokens[4]); 
      context.write(new Text(sourceUser), new InteractionWritable(targetUser, points)); 
      } 
     } 
    } 
} 

यहाँ मेरी कम करने है:

static public class InteractionReduce extends Reducer<Text, InteractionWritable, Text, Text> { 

    @Override 
    protected void reduce(Text token, Iterable<InteractionWritable> counts, Context context) throws IOException, InterruptedException { 
     System.out.println("REDUCER"); 
     Iterator<InteractionWritable> i = counts.iterator(); 
     while (i.hasNext()) { 
      InteractionWritable interaction = i.next(); 
      context.write(token, new Text(token.toString() + " " + interaction.getTargetUser().toString() + " " + interaction.getPoints().get())); 
     } 
    } 

} 

और, यहाँ विन्यास हिस्सा है:

@Override 
public int run(String[] args) throws Exception { 
    Configuration configuration = getConf(); 
    Job job = new Job(configuration, "Interaction Count"); 
    job.setJarByClass(InteractionMapReduce.class); 
    job.setMapperClass(InteractionMap.class); 
    job.setCombinerClass(InteractionReduce.class); 
    job.setReducerClass(InteractionReduce.class); 
    job.setInputFormatClass(TextInputFormat.class); 
    job.setOutputFormatClass(TextOutputFormat.class); 
    job.setOutputKeyClass(Text.class); 
    job.setOutputValueClass(Text.class); 
    FileInputFormat.addInputPath(job, new Path(args[0])); 
    FileOutputFormat.setOutputPath(job, new Path(args[1])); 
    return job.waitForCompletion(true) ? 0 : -1; 
} 

किसी को क्यों कम करने नहीं है किसी भी विचार है आह्वान किया जा रहा है?

+0

क्या आप मानचित्र, संयोजक और reducer इनपुट/आउटपुट गणना के लिए अपने काउंटर साझा कर सकते हैं? –

उत्तर

6

ठीक है, यह मेरी गलती थी, जैसा कि अपेक्षित था। नौकरी विन्यास अच्छा नहीं था। क्योंकि नक्शा और को कम चरणों विभिन्न उत्पादन प्रकार है

Configuration configuration = getConf(); 

Job job = new Job(configuration, "Interaction Count"); 
job.setJarByClass(InteractionMapReduce.class); 
job.setMapperClass(InteractionMap.class); 
job.setReducerClass(InteractionReduce.class); 
job.setMapOutputKeyClass(Text.class); 
job.setMapOutputValueClass(InteractionWritable.class); 
job.setOutputKeyClass(Text.class); 
job.setOutputValueClass(Text.class); 

FileInputFormat.addInputPath(job, new Path(args[0])); 
FileOutputFormat.setOutputPath(job, new Path(args[1])); 

return job.waitForCompletion(true) ? 0 : -1; 

समस्या उत्पन्न हुई: यह देखने के लिए कैसे की तरह करना चाहिए। संदर्भ.write विधि का आह्वान करने के बाद नौकरी चुपचाप विफल रही। तो, मुझे जो जोड़ना था, वे हैं:

job.setMapOutputKeyClass(Text.class); 
job.setMapOutputValueClass(InteractionWritable.class); 
job.setOutputKeyClass(Text.class); 
job.setOutputValueClass(Text.class); 
0
  1. मुझे आशा है कि text आपके Mapper विधि में कुछ डेटा है।
  2. क्या आपको ReducerCombiner के साथ-साथ Reducer होने की आवश्यकता है?

मैं हमेशा एक मुख्य वर्ग InteractionMapReduce है और इसके अंदर मैं InteractionMap और InteractionReduce वर्ग की है।

तो Mapper और नौकरी में Reducer कक्षा सेट करते समय, मैंने उन्हें InteractionMapReduce.InteractionMap.class और InteractionMapReduce.InteractionReduce.class सेट किया।

मुझे नहीं पता कि यह आपकी मदद करेगा या नहीं, लेकिन आप इसे आजमा सकते हैं।

+0

1. यह है। इनपुट डेटा में सीएसवी पाठ की लगभग 1000 लाइनें हैं। 2. मैं नहीं करता, लेकिन इसे संयोजक के रूप में हटाकर समस्या का समाधान नहीं करता है। – ezamur

+0

एक बिंदु जोड़ा गया। – JHS

+0

इसे देखा। Reducer हस्ताक्षर ठीक है, मैंने इसे एपीआई दस्तावेज़ों के साथ चेक किया है। – ezamur