合并器是否有条件运行



min.num.spils.for.combine(默认值3)

这意味着什么?

a) 组合器运行所需的映射溢出的最小数量?所以,即使我们指定了一个组合器,它也不能保证运行?

b) 组合器在通过io.sort.factor创建的合并/排序的单个文件上运行之前的最小溢出次数。因此,每次通过合并创建新文件时,组合器都会在其上运行,前提是溢出次数为最小3

我觉得正确的答案是a),但有人能证实吗。

当map函数生成中间结果并首先将其发送到缓冲区时,分区和排序将启动,如果指定了组合器,则此时将调用它。此过程与map函数并行。当map函数完成时,磁盘上的所有溢出都将被合并,此时组合器也将被调用。

缓冲区阈值受io.sort.spill.percent的限制,在此期间会产生溢出。如果溢出次数超过min.num.spills.for.combine,则在写入磁盘之前,会对创建的溢出调用组合器。

因此,要回答你的问题:你是对的,这就是选择a)。

参考:这个邮件线程。

我也有同感:)

min.num.spills.for.component(默认值为3)表示,如果您的工作中有一个组合器,并且溢出次数为三次或更多(至少为3次),那么它将在映射输出写入本地磁盘之前被调用。

参见《最终指南:》中的这一段

如果指定了组合器功能,并且溢出次数为至少三个(min.num.spils.for.combine属性的值),则组合器在写入输出文件之前运行。回忆起组合器可以在不影响输入的情况下重复运行最终结果。关键是,运行组合器可以紧凑的映射输出,因此写入本地磁盘的数据更少以转移到减速器。

相关内容

  • 没有找到相关文章

最新更新