4

某些操作(如中位数和平均值)是不可交换的。在这种情况下,似乎只能有一个减速器,因为减速器需要具有全局视图。 map-reduce中是否有可以并行执行的非交换reducer?遇到非交换操作时,人们是否真的使用map-reduce?或者只是在一些非常强大的机器上运行它?是否有常见的方法将非交换操作分解为交换操作?mapreduce中是否有可以并行执行的非交换reducer?

感谢

+0

这里有一些讨论这里http://clojure.com/blog/2012/05/08/reducers-a-library-and-model-for-collection-processing.html – 2014-02-07 14:15:08

+0

相关问题在这里http:///stackoverflow.com/questions/11731770/combiner-and-reducer-can-be-different – 2014-02-07 14:19:50

回答

1

我不知道“交换”是在这里使用合适的词,但我明白你在说什么。

在hadoop中,后贴图阶段实际上分为两个步骤:一个Combiner和一个Reducer,具有相同的签名。 Combiner在映射器上运行,以在输出密钥并将其发送给reducer之前减少输出的大小。如果你只是指定一个Reducer,那么它将用于两者;但是你可以将它们分开,做得比你想象的还要惊人。

做计数操作的简单情况下使用的计数减速机,其可用于结合步骤和减少步骤两者。这样可以减少多次将相同的密钥通过线路发送的需要。

可以实现类似的效率,通过定义不同的组合和减速器计算的平均值。例如,映射器输出对应于数值和的1的计数的值(number, 1)该组合可以映射值到任何一个(sum, count)元组或(mean, count)元组的集合,和减速器可以使用计数的权重以产生聚合这些平均。 (另外:使用Kahan summation可以大大减少添加大量数字的错误)。这就允许映射器完成一些组合,就像在一个简单的计数例子中一样。

你可以做很多聪明的事情在一个单一的map-reduce一步。但是,我不认为中位数是可能的。在这种情况下,您实际上必须通过一台机器的状态发送所有数字。

+0

嗨@Andrew_Mao,感谢您的重播。所以,我想你的意思是我们可以假定减速器是“交换的”(请让我知道在这种情况下是否有更好的词)?否则(比如说中位数),我们可以启动一个只有地图的作业,并在一台机器上执行reduce部分。 – 2013-02-14 06:55:34

+0

嗨,我不明白你的问题“我们可以假定减速器是可交换的”。一个交换操作符意味着它对操作数的顺序不敏感,而在这里我们正在讨论能够使用同一个reducer来进行组合和缩减,或者需要不同的来获得结果的区别。顺便说一下,其他人已经讨论了中值的近似值:http://stackoverflow.com/questions/6968215/find-median-of-a-large-integer-set-using-mapreduce,http://stackoverflow.com/问题/ 10109514 /计算的中值在-的map-reduce – 2013-02-14 07:37:49

相关问题