统计过程中对每一个maptask的输出进行局部汇总,以减小网络传输量即采用Combiner功能
1、分析
2、方案一
1)增加一个WordcountCombiner类继承Reducer
import java.io.IOException;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;
public class WordcountCombiner extends Reducer<Text, IntWritable, Text, IntWritable>{
@Override
protected void reduce(Text key, Iterable<IntWritable> values,
Context context) throws IOException, InterruptedException {
int count = 0;
for(IntWritable v :values){
count += v.get();
}
context.write(key, new IntWritable(count));
}
}
2)在WordcountDriver驱动类中指定combiner
//指定需要使用combiner,以及用哪个类作为combiner的逻辑
job.setCombinerClass(WordcountCombiner.class);
3、方案二
1)将WordcountReducer作为combiner在WordcountDriver驱动类中指定
//指定需要使用combiner,以及用哪个类作为combiner的逻辑
job.setCombinerClass(WordcountReducer.class);
2)运行程序
4、基于wordcount案例
https://www.jianshu.com/p/c8726f1ccd8f
5、Code -> GitHub