【问题标题】:Is there any non-commutative reducer in mapreduce that can be executed in parallel?mapreduce 中是否有可以并行执行的非交换reducer?
【发布时间】:2013-01-29 21:05:59
【问题描述】:

中值和均值等一些运算是不可交换的。这种情况下似乎只能有一个reducer,因为reducer需要有全局视图。 map-reduce 中是否有可以并行执行的非交换reducer?当遇到非交换操作时,人们真的会使用 map-reduce 吗?或者只是在一些非常强大的机器上运行它?有没有常用的方法将非交换运算分解为可交换运算?

谢谢

【问题讨论】:

标签: algorithm hadoop parallel-processing mapreduce distributed-computing


【解决方案1】:

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

在hadoop中,post-mapping阶段实际上分为两个步骤:一个Combiner和一个Reducer,签名相同。 Combiner 在映射器上运行以减少输出的大小,然后再进行键排序并发送到减速器。如果您只指定一个Reducer,那么它将用于两者;但你可以将它们分开,做的事情比你想象的要多。

进行计数操作的简单案例使用计数归约器,可用于合并步骤和归约步骤。这减少了通过网络多次发送相同密钥的需要。

您可以通过定义不同的组合器和化简器来实现类似的计算均值的效率。例如,映射器输出一个值(number, 1),对应于一个数值和一个计数为1。组合器可以将一组值映射到(sum, count)元组或(mean, count)元组,reducer可以使用聚合这些值计算的重量以产生平均值。 (顺便说一句:使用Kahan summation 可以大大减少添加大量数字时的错误)。这允许映射器进行一些组合,就像在一个简单的计数示例中一样。

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

【讨论】:

  • 嗨@Andrew_Mao,感谢您的重播。所以,我想你的意思是我们可以假设减速器是“可交换的”(如果在这种情况下有更好的词,请告诉我)?否则(比如中位数),我们可以启动一个仅映射作业并在一台机器上执行归约部分。
  • 嗨,我不明白你的问题“我们可以假设减速器是可交换的”。可交换运算符意味着它对其操作数的顺序不敏感,而这里我们讨论的是能够使用相同的 reducer 进行组合和归约,或者需要不同的 reducer 来获得结果的区别。顺便说一句,其他人已经讨论了中位数的近似值:stackoverflow.com/questions/6968215/…stackoverflow.com/questions/10109514/…
猜你喜欢
  • 2016-06-21
  • 2012-11-15
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-19
  • 2010-12-29
相关资源
最近更新 更多