hadoop中combiner的作用

  • Post author:
  • Post category:其他


之前一直很困惑combiner有什么用,这次看了书有了一些理解的

hadoop允许用户声明一个combiner,运行在map的输入上,函数的输出作为reduce函数的输入。

比如:

对这样的语句”daddy finger, daddy finger, where are you, here I am, here I am, how do you do”进行workcount。

有两个map分别处理三个短句,

map1的输出结果是:<daddy, 1> <finger, 1> <daddy, 1> <finger, 1> <where, 1> <are, 1> <you, 1>;

map2的输出结果是:<here, 1> <I, 1> <am ,1> <here, 1> <I, 1> <am, 1> <how, 1> <do, 1> <you, 1> <do, 1>。

有一个reduce来处理count操作。如果不采用combiner的话,总共有17条记录传递给reduce task。

如果采用combiner的话,combiner会对map task本地端的结果进行combine操作(这里是wordcount),这样map端的数据结果就是combiner之后的结果。

比如map1的输出结果就变成<daddy, 2> <finger, 2> <where, 1> <are, 1> <you, 1>;

map2的输出结果就变成<here, 2> <I, 2> <am ,2> <how, 1> <do, 2> <you, 1>。

这样总共有11条记录传递给reduce task,比之前的少。所以combier主要目的是减少map输出。

总而言之就是:

当map生成的数据过大时,带宽就成了瓶颈,怎样精简压缩传给Reduce的数据,又不影响最终的结果呢。有一种方法就是使用Combiner,Combiner号称本地的Reduce,Reduce最终的输入,是Combiner的输出。



版权声明:本文为weixin_43436824原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。