mapreduce中是否有可以并行执行的非交换减少器?

时间:2013-02-14 05:40:59

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

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

由于

1 个答案:

答案 0 :(得分:1)

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

在hadoop中,映射后阶段实际上分为两个步骤:CombinerReducer,具有相同的签名。 Combiner在映射器上运行,以在输出密钥排序并发送到reducer之前减小输出的大小。如果您只指定Reducer,那么它将用于两者;但是你可以将它们分开,比你想象的更令人惊讶。

进行计数操作的简单情况使用计数减速器,它可用于组合步骤和减少步骤。这减少了多次通过线路发送相同密钥的需要。

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

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