Hadoop组合器:在字数mapreduce程序中使用相同的reducer代码作为组合器?

时间:2014-02-09 20:00:16

标签: hadoop word-count combiners

特别是来自认证机构的实践测试的这个问题对我来说没有意义。有人可以帮忙吗?

问题:
映射器发出键和值对的字计数问题,其中每个单词作为键,文字1作为值发出。然后,reducer为它接收的每个文字“1”递增一个计数器。 qn是“我们可以使用现有的reducer代码作为组合器吗?”

正确答案描述为。 “是”,因为总和任务是可交换的和关联的。

但我的理解是,答案应该是“不”,因为这两个场景导致两个不同的答案。我相信只有使用相同的reducer和combiner代码而不是“为它收到的每个文字1增加一个计数器”,我们采用另一种方法来增加计数器的接收值。

以一个例子来考虑它 让我们先考虑一个没有组合器的假设情况 例如,假设map1 o / p是(to,1),(to,1)和map2 o / p是(to,1) 然后i / p到reducer变为(to,[1,1,1]) 然后,减速器o / p变为(to,3)

但是对于组合器,当map1 o / p被馈送到组合器时,组合器o / p变为(to,2)。减速器i / p现在变为(to,[2,1])。然后在reducer中,我们只增加计数器,只对每个文字1值,即我们丢弃文字2,然后o / p变为(to,1)

使用组合器,o / p是(to,1),没有组合器,我们看到o / p是(to,3)。

请帮助我,如果我在某处或其他地方出错了?

提前感谢您的答案, Bikal Basnet

1 个答案:

答案 0 :(得分:2)

您的理解是正确的,但在经典的MapReduce字数统计应用中,reducer可以用作组合器。看看WordCount中的第37行。它是:

sum += val.get();

而不是:

sum += 1;