【发布时间】:2013-10-07 12:46:16
【问题描述】:
我有一个 MapReduce 作业,它读取一个文件,然后收集所有不超过 5 个字符的单词,并使用第一个字母作为键以大写字母开头。我在没有使用组合器的情况下运行了两次工作,第二次使用组合器运行了这项工作。我比较了执行时间,我注意到使用组合器增加了执行时间。我想知道是什么导致时间增加,使用组合器时总是这样吗?
谢谢
【问题讨论】:
标签: hadoop mapreduce combiners
我有一个 MapReduce 作业,它读取一个文件,然后收集所有不超过 5 个字符的单词,并使用第一个字母作为键以大写字母开头。我在没有使用组合器的情况下运行了两次工作,第二次使用组合器运行了这项工作。我比较了执行时间,我注意到使用组合器增加了执行时间。我想知道是什么导致时间增加,使用组合器时总是这样吗?
谢谢
【问题讨论】:
标签: hadoop mapreduce combiners
顾名思义,组合器只应在有任何组合的可能性时使用。一般来说,它应用于交换函数(a.b = b.a) 和关联函数 {a.(b.c) = (a.b).c} 。但这只是为了谨慎起见,没有硬性规定它必须是可交换的和关联的。组合器可能仅对您的键和值的子集进行操作,或者可能根本不执行。因此,如果映射器输出中的重复键数量非常少,那么有时使用组合器可能会适得其反,反而会成为无用的负担。所以只有在有足够的组合范围时才使用组合器。
引用 Chuck Lam 的“Hadoop in Action”:
“组合器不一定会提高性能。您应该 监控作业的行为,查看输出的记录数 由组合器有意义地小于记录的数量 中的减少必须证明运行一个额外的执行时间是合理的 合路器。 "
因此,在您的情况下,可以组合的子集的数量可能会更少,因此运行组合器的开销最终会增加您的执行时间。
阅读我的文章here了解更多信息。
【讨论】: