大数据教程Combiner合并案例实操

Combiner合并案例实操

1.需求

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

(1)数据输入

(2)期望输出数据

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

2.需求分析

 

大数据教程Combiner合并案例实操

 

图4-15 Combiner的合并案例

3.案例实操-方案一

1)增加一个WordcountCombiner类继承Reducer

package com.atguigu.mr.combiner;

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>{

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);

运行程序,如图4-16,4-17所示

 

大数据教程Combiner合并案例实操

 

图4-16 未使用前

 

大数据教程Combiner合并案例实操

 

图4-17 使用后

大数据培训