0

我有一个 MapReduce 作业,它读取一个文件,然后收集所有不超过 5 个字符的单词,并使用第一个字母作为键以大写字母开头。我在没有使用组合器的情况下运行了两次工作,第二次使用组合器运行了这项工作。我比较了执行时间,我注意到使用组合器增加了执行时间。我想知道是什么导致时间增加,使用组合器时总是这样吗?

谢谢

4

1 回答 1

1

顾名思义,组合器只应在有任何组合可能性时使用。一般来说,它应该应用于可交换的(ab = ba)和关联的函数 {a.(bc) = (ab).c} 。但这只是为了谨慎起见,没有硬性规定它必须是可交换的和关联的。组合器可能仅对您的键和值的子集进行操作,或者可能根本不执行。因此,如果您的映射器输出中的重复键数量非常少,那么有时使用组合器可能会适得其反,反而成为无用的负担。所以只有在有足够的组合范围时才使用组合器。

引用 Chuck Lam 的“Hadoop in Action”:

“组合器不一定会提高性能。您应该监视作业的行为,以查看组合器输出的记录数是否明显少于进入的记录数。减少必须证明运行组合器的额外执行时间是合理的。”

因此,在您的情况下,可以组合的子集数量可能会减少,因此运行组合器的开销最终会增加您的执行时间。

从我的文章中阅读更多信息。

于 2013-10-07T04:46:16.813 回答