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

z9gpfhce  于 2021-06-04  发布在  Hadoop
关注(0)|答案(1)|浏览(308)

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

hwazgwia

hwazgwia1#

我不知道“交换”这个词在这里用得对不对,但我明白你的意思。
在hadoop中,Map后阶段实际上分为两个步骤: Combiner 和一个 Reducer ,签名相同。这个 Combiner 在Map器上运行以减小输出的大小,然后再对其进行键排序并将其发送给还原器。如果你只指定一个 Reducer ,则两者都使用;但你可以把它们分开,让它们比你想象的要多得多。
进行计数操作的简单情况使用计数减速机,该减速机可用于合并步骤和减速机步骤。这样就减少了同一个密钥通过导线多次发送的需要。
通过定义不同的合并器和归约器,您可以获得计算平均值的类似效率。例如,Map器输出一个值 (number, 1) 对应于数值和计数1。组合器可以将值集合Map到 (sum, count) 元组或 (mean, count) 元组,并且reducer可以使用计数的权重来聚合这些值,从而生成平均值(顺便提一下:使用kahan求和法(summation)可以大大减少添加大量数字的错误。这使得Map者可以像在一个简单的计数示例中那样进行一些组合。
你可以在一个Map缩小步骤中做很多聪明的事情。然而,我不认为这是可能的中位数;在这种情况下,你实际上必须通过一台机器的状态发送所有的数字。

相关问题