2017-03-29 7 views
0

定義済みの基本単語数をhereとして使用しようとしています。 IntSumReducerがcontext.writeを実行したときに、context.writeをIntSumReducerによって与えられた最終リストを単一の最大頻度まで減らしたり変更したりするために、第2の減速または出力クラスに渡すことは可能でしょうか?最高頻度のHadoop MapReduceジョブ

私はHadoop/MapReduceとJavaのジョブの概念が新しくなっているので、デフォルトのWordCountを修正してそれを可能にするためにはどのように正確に必要なのでしょうか。 2番目のリデューサー機能を書いて同じ仕事の中に入れることができますか?どうすればいい? IntSumReducerの後に実行する別の減速器があることを私はどのように伝えますか?

ベースWORDCOUNT:

import java.io.IOException; 
import java.util.StringTokenizer; 

import org.apache.hadoop.conf.Configuration; 
import org.apache.hadoop.fs.Path; 
import org.apache.hadoop.io.IntWritable; 
import org.apache.hadoop.io.Text; 
import org.apache.hadoop.mapreduce.Job; 
import org.apache.hadoop.mapreduce.Mapper; 
import org.apache.hadoop.mapreduce.Reducer; 
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat; 
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat; 

public class WordCount { 

    public static class TokenizerMapper 
    extends Mapper<Object, Text, Text, IntWritable>{ 

private final static IntWritable one = new IntWritable(1); 
private Text word = new Text(); 

public void map(Object key, Text value, Context context 
       ) throws IOException, InterruptedException { 
    StringTokenizer itr = new StringTokenizer(value.toString()); 
    while (itr.hasMoreTokens()) { 
    word.set(itr.nextToken()); 
    context.write(word, one); 
    } 
} 
} 

public static class IntSumReducer 
    extends Reducer<Text,IntWritable,Text,IntWritable> { 
private IntWritable result = new IntWritable(); 

public void reduce(Text key, Iterable<IntWritable> values, 
        Context context 
        ) throws IOException, InterruptedException { 
    int sum = 0; 
    for (IntWritable val : values) { 
    sum += val.get(); 
    } 
    result.set(sum); 
    context.write(key, result); 
    } 
} 

    public static void main(String[] args) throws Exception { 
Configuration conf = new Configuration(); 
Job job = Job.getInstance(conf, "word count"); 
job.setJarByClass(WordCount.class); 
job.setMapperClass(TokenizerMapper.class); 
job.setCombinerClass(IntSumReducer.class); 
job.setReducerClass(IntSumReducer.class); 
job.setOutputKeyClass(Text.class); 
job.setOutputValueClass(IntWritable.class); 
FileInputFormat.addInputPath(job, new Path(args[0])); 
FileOutputFormat.setOutputPath(job, new Path(args[1])); 
System.exit(job.waitForCompletion(true) ? 0 : 1); 
    } 
}` 

答えて

0

はHadoopの中Combinerあなたが探していると呼ばれ、最終減速クラスに出力を発する前に、いくつかの半削減を行います。詳細はhereをクリックしてください。

+0

指定されたリンクは、WordCountの実装も提供します。 –

関連する問題