hadoop combiner:在word count mapreduce程序中使用与combiner相同的reducer代码?

7bsow1i6  于 2021-06-03  发布在  Hadoop
关注(0)|答案(1)|浏览(451)

这个问题来自认证机构的实践测试,尤其是,没有意义的我。有人能帮忙吗?
问题:
Map器发出键和值对时出现字数计数问题,其中,对于作为键的每个字,文本1作为值发出。然后,缩减器为接收到的每个文本“1”递增一个计数器。问题是“我们可以使用现有的reducer代码作为合并器吗”?
正确答案描述为。”是的,我们可以,因为和任务是交换的和结合的。
但我的理解是,答案应该是“不”,因为这两种情况会导致两个不同的答案。我相信只有当我们不使用“为它接收的每一个字面值1增加一个计数器”的方法,而是使用另一种方法,用它接收的值增加计数器时,才能使用相同的缩减器和组合器代码。
通过一个例子来考虑它,让我们先考虑一个没有组合器的假设情况,例如假设map1 o/p be(to,1),(to,1)和map2 o/p be(to,1),那么i/p to reducer变成(to,[1,1,1]),reducer o/p变成(to,3)
但对于合路器,当map1 o/p馈送到合路器时,合路器o/p变为(to,2)。减速器i/p现在变为(to,[2,1])。然后在reducer中,我们只增加计数器,并且只增加每个literal 1的值,即丢弃literal 2,然后o/p变成(to,1)
有合路器时,o/p为(to,1),没有合路器时,o/p为(to,3)。
请帮助我,如果我在这件事上有什么地方错了,或者是别的地方错了?
提前谢谢你的回答,比卡尔·巴斯内特

y53ybaqx

y53ybaqx1#

您的理解是正确的,但是在经典的mapreduce字数计算应用程序中,reducer可以用作组合器。请看wordcount中的第37行。它是:

sum += val.get();

而不是:

sum += 1;

相关问题