要点
- Combiner 所做的事情:
每一个map都可能会产生大量的本地输出,Combiner的作用就是对map端的输出先做一次合并,以减少在map和reduce节点之间的数据传输量; - Combiner 的意义:
在MapReduce中,当map生成的数据过大时,带宽就成了瓶颈,当在发送给 Reduce 时对数据进行一次本地合并,减少数据传输量以提高网络IO性能; - Combiner 的时机:
Combiner 最基本的是实现本地key的聚合,有本地 Reduce 之称
,实际上是现实就继承来 Reducer ,本质上就是一个 Reducer。
过程
使用注意
不要以为在写MapReduce程序时设置了Combiner就认为Combiner一定会起作用,实际情况是这样的吗?答案是否定的。hadoop文档中也有说明Combiner可能被执行也可能不被执行。那么在什么情况下不执行呢?如果当前集群在很繁忙的情况下job就是设置了也不会执行Combiner。
还要注意,Combiner使用的合适的话会提高Job作业的执行数度,但是使用不合适的话,会导致输出的结果不正确。Combiner的输出是Reduce的输入,它绝不会改变最终的计算结果。Conbiner的适用场景比如说在汇总统计时,就可以使用Conbiner,但是在求平均数的时候就是适合适用了。