统计过程中对每一个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
本文详细介绍如何在MapReduce作业中使用Combiner来优化WordCount任务,通过局部汇总减少网络传输,提升处理效率。文章提供了两种实现方案,包括创建专用的Combiner类和直接使用Reducer作为Combiner。
1469

被折叠的 条评论
为什么被折叠?



