我有一个MapReduce作业,它读取一个文件,然后收集所有5个字符或更少的单词,并以大写字母开头,使用第一个字母作为键。我在不使用合路器的情况下运行了两次作业,第二次使用合路器。我比较了执行时间,我注意到使用组合器增加了执行时间。我想知道是什么原因导致时间增加,使用合路器时总是如此吗?
谢谢
名思义,只有在有可能组合时才应使用组合器。通常,它应应用于交换(a.b = b.a(和结合{a.(b.c( = (a.b(.c}的函数。但这只是为了谨慎起见,没有硬性规定它必须是交换和关联的。组合器可能仅对键和值的子集进行操作,也可能根本不执行。因此,如果映射器输出中的重复键数量非常少,那么有时使用组合器可能会适得其反,反而成为无用的负担。因此,仅当有足够的组合范围时才使用组合器。
引用Chuck Lam的"Hadoop in Action":
因此,"合路器不一定能提高性能。你应该 监视作业的行为以查看输出的记录数 通过合并器有意义地小于记录数 在。减少必须证明运行 合路器。">
在您的情况下,可以组合的子集数量可能比率较小,因此运行合并器的开销最终会增加您的执行时间。
从我的文章中阅读更多内容 这里.