Hadoop-MapReduce-Combiner合并案例实操-连载中

Combiner合并

在这里插入图片描述
(6)自定义Combiner实现步骤

​ (a)自定义一个Combiner继承Reducer,重写Reduce方法

public class WordcountCombiner extends Reducer<Text, IntWritable, Text,IntWritable>{

	@Override
	protected void reduce(Text key, Iterable<IntWritable> values,Context context) throws IOException, InterruptedException {
        // 1 汇总操作
		int count = 0;
		for(IntWritable v :values){
			count += v.get();
		}
        // 2 写出
		context.write(key, new IntWritable(count));
	}
}

​ (b)在Job驱动类中设置:

job.setCombinerClass(WordcountCombiner.class);

Combiner合并案例实操

1)需求

统计过程中对每一个MapTask的输出进行局部汇总,以减小网络传输量即采用Combiner功能。

(1)数据输入

(2)期望输出数据

期望:Combine输入数据多,输出时经过合并,输出数据降低。

2)需求分析
在这里插入图片描述
3)案例实操-方案一

(1)增加一个WordcountCombiner类继承Reducer

public class WordcountCombiner extends Reducer<Text, IntWritable, Text, IntWritable>{

	IntWritable v = new IntWritable();

	@Override
	protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        // 1 汇总
		int sum = 0;
		for(IntWritable value :values){
			sum += value.get();
		}
		v.set(sum);
		// 2 写出
		context.write(key, v);
	}
}

(2)在WordcountDriver驱动类中指定Combiner

// 指定需要使用combiner,以及用哪个类作为combiner的逻辑
job.setCombinerClass(WordcountCombiner.class);

4)案例实操-方案二

(1)将WordcountReducer 作为 Combiner 在 WordcountDriver 驱动类中指定

// 指定需要使用Combiner,以及用哪个类作为Combiner的逻辑
job.setCombinerClass(WordcountReducer.class);

运行程序,如下图所示
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_32727095/article/details/107558788
今日推荐