0. 说明
Combiner 介绍 && 在 MapReduce 中的应用
1. 介绍
Combiner:
Map 端的 Reduce,有自己的使用场景
在相同 Key 过多的情况下,在 Map 端进行的预聚合,大大缓解了网络间的 K-V 全分发
Combiner 适用场景:
- 最大值
- 求和
- 最小值
Combiner 不适用平均值的计算
2. 结合 Combiner 实现 Word Count
在 [MapReduce_1] 运行 Word Count 示例程序 代码基础上在 WCApp.java 中添加了以下内容
3. 结合 Combiner 实现最高气温统计
在 [MapReduce_add_2] MapReduce 实现年度最高气温统计 代码基础上进行改进
【3.1 编写 MaxTempCombiner.java】
package hadoop.mr.combiner; import org.apache.hadoop.io.IntWritable; import org.apache.hadoop.io.Text; import org.apache.hadoop.mapreduce.Reducer; import java.io.IOException; /** * Combiner 类 */ public class MaxTempCombiner extends Reducer<Text, IntWritable, Text, IntWritable> { @Override protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException { Integer max = Integer.MIN_VALUE; // 得到最大值 for (IntWritable value : values) { max = Math.max(max, value.get()); } // 输出年份与最大温度 context.write(key, new IntWritable(max)); } }
【3.2 修改 MaxTempApp.java】