“合\”类的MapReduce工作(“Combiner\" Class in a mapreduce

2019-06-23 18:24发布

组合器映射器后运行和减速之前,将作为输入接收由所述映射器实例给定节点上发射的所有数据。 然后发射输出到减速。

而且,如果减少功能既可交换并且关联 ,那么它可以作为一个组合。

我的问题是什么呢短语“ 交换和关联 ”在这种情况下是什么意思?

Answer 1:

假设你有号码的列表,1 2 3 4 5 6。

这里联想意味着你可以把你的操作,并把它应用到任何分组,然后将其应用到这些结果,并得到了相同的答案:

(1) + (2 + 3) + (4 + 5 + 6)
  ==
(1 + 2) + (3 + 4) + (5) + (6)
  ==
...

想到这里的括号中的组合的执行。

交换指顺序并不重要,所以:

1 + 2 + 3 + 4 + 5 + 6
  ==
2 + 4 + 6 + 1 + 2 + 3
  ==
...

例如,另外,符合这个特性,就像前文说到。 “最大”符合上面还有这个属性,因为MAXS的最大值为最大。 MAX(A,B)== MAX(B,A)。

中位数是行不通的例子:中位数的中位数是不是真正的中位数。


不要忘了一个组合的另一个重要特性:输入类型的键/值和输出类型的键/值的需要是相同的。 例如,你不能把一个字符串:int和返回一个字符串:浮动。

很多时候,减速可能输出某种字符串,而不是数值,这可能会阻止您只是在你减速的组合堵塞。



Answer 2:

对于交换性,比方说你的减速可以通过功能(在数学术语)表示所谓的F()。 然后你减速是可交换如果f(A,B)= F(B,A)。例如:

  • 总和(A,B)是相同的总和(B,A)
  • XOR(A,B)是相同的XOR(B,A)
  • 的concat(A,B)是一样的concat(B,A)

对于关联,所述属性是F(F(A,B),C)= F(A,F(B,C))。 例如:

  • (A + B)+ C是一样的A +(B + C)
  • (A - B) - C是一样的A - (B - C)

所以在地图的背景/缩小,你减速器必须尊重这两个属性。 例如,如果你的减速只是做一个总和()或MAX(),它尊重这两个属性,但类似均值()或中位数()没有,因此你不能用它作为一个组合。

我个人认为合为小型减速器运行在内存中的映射阶段作为优化后,减少网络流量,以及可交换/关联性其实是有道理的,如果你看到的Map / Reduce是这样的:



文章来源: “Combiner\" Class in a mapreduce job