我有一个MapReduce作业,它读取一个文件,然后收集5个字符或更少的所有单词,并以第一个字母为键开头的大写字母。我在没有使用合成器的情况下运行了两次,第二次使用合并器。我比较了执行时间,我注意到使用组合器增加了执行时间。我想知道导致时间增加的原因是什么?使用组合器的情况总是如此?
谢谢
答案 0 :(得分:1)
正如名称本身所示,只有在有可能结合时才应使用组合器。通常,它应适用于可交换的函数(a.b = b.a)和关联的{a。(b.c)=(a.b).c}。但这只是为了谨慎,没有硬性和快速的规则,它必须是可交换的和联想的。组合器可能仅在您的键和值的子集上运行,或者可能根本不执行。因此,如果映射器输出中的重复键数量非常少,那么有时使用组合器可能会适得其反,反而成为无用的负担。因此,只有在有足够的组合范围时才使用组合器。
引用Chuck Lam的“行动中的Hadoop”:
“组合器不一定能提高性能。你应该 监视作业的行为以查看输出的记录数 由组合器有意义地小于记录的数量 减少必须证明运行a的额外执行时间是合理的 组合。 “
因此,在您的情况下,可以组合的子集数量可能较少,因此运行组合器的开销最终会增加执行时间。
阅读我的文章here。