Mapreduce三大组件之二 Combiner——本地Reducer

一、什么是 Combiner?

作用:在 MapTask 之后给 MapTask 的结果进行局部汇总以减轻 ReduceTask 的计算负载,减少网络传输
每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少在map和reduce节点之间的数据传输量,以提高网络IO性能,是MapReduce的一种优化手段之一
Combiner最基本是实现本地key的聚合,对map输出的key排序,value进行迭代。有本地 Reduce 之称 

------------实际上就是继承Reducer类,本质上就是一个Reducer

二、数据格式的转换

map: (K1, V1) → list(K2, V2) 
combiner: (K2, list(V2)) → list(K3, V3) 
reduce: (K3, list(V3)) → list(K4, V4)
数据转换流程图:

三添加设置 Combiner 的代码

1、具体实现步骤
(1)自定义一个 Combiner 继承 Reducer,重写 reduce 方法
(2)在 Job 中设置: job.setCombinerClass(xxx.class)

 具体代码实现:
(1)Combiner 的代码和 reduce 端的代码一致,本质上就是一个 Reducer
(2)在 job 中设置 Combiner 类
// 指定combiner
job.setCombinerClass(WordCountReducer.class);

使用 Combiner 的注意事项

(1)运行位置
		Combiner 是在每一个 MapTask 所在的节点运行
		Reducer 是接收全局所有 Mapper 的输出结果
(2)Combiner 的输出 KV 跟 Reducer 的输入 KV 类型相对应
(3)Combiner 使用的原则是:有或没有都不能影响业务逻辑,都不能影响最终结果。
(4)适用场景:汇总统计;不适用场景:求平均数适用于Reduce的输入key/value与输出key/value类型完全一致情况

如果你看不懂请参考:Hadoop学习笔记—8.Combiner与自定义Combiner特详细

参考资料

(1)Suddenly,《Hadoop日记Day17-计数器、map规约与分区学习》
(2)guoery,《MapReduce中Combiner的使用及误区》
(3)iPolaris,《Hadoop中Combiner的使用》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值