Hadoop实战:使用Combiner提高Map/Reduce程序效率

好不容易算法搞定了,小数据测试也得到了很好的结果,可是扔到进群上,挂上大数据就挂了,无休止的reduce不会结束了。。。。。。。。。。。。。。。。

====================================================================

这才想起还有个combiner!!!!!!!!!!!!!!!!!!!!!

我们知道,MapReduce是分为Mapper任务和Reducer任务,Mapper任务的输出,通过网络传输到Reducer任务端,作为输入。

在Reducer任务中,通常做的事情是对数据进行归约处理。那么当大量的Mapper结果狂奔而来的时候,Reducer很多时候是招架不住的,尤其是每一个结果size也很大的时候。现在该Combiner发挥作用了,我们可以把Reducer要做的工作让Combiner来做,这样不仅本地完成了数据的规约处理,同时也大量减少了网络传输负载,传输时间大大缩减可以提高效率。Reducer端接受的数据就基本是结果了。。。。。。。。。。。。。。。。。 

要注意的是,Combiner只在Mapper任务所在的节点运行,不会跨Mapper任务运行。Reduce端接收所有Mapper端的输出来作为输入。虽然两边的归约类是同一个,但是执行的位置完全不一样。

并不是所有的归约工作都可以使用Combiner来做。比如求平均值就不能使用Combiner。因为对于平均数的归约算法不能多次调用。

===================================================================

Hadoop实战:使用Combiner提高Map/Reduce程序效率_第1张图片


你可能感兴趣的:(mapreduce,hadoop)