2013-07-31 42 views
1

min.num.spills.for.combine(默认3)组合器是否有条件运行

它表示什么?

a)最小号码。地图溢出让组合器运行?所以,即使我们已经指定了一个组合器,它不能保证运行?

b)最小号码。在合并器运行在通过io.sort.factor创建的合并/排序的单个文件之前有溢出。所以每次通过合并创建一个新文件时,组合器都会运行到该文件上,前提是没有。的溢出是最小3

我觉得正确的答案是a),但任何人都可以证实。

回答

1

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

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

所以要回答你的问题:你是对的,它是选择a)。

Ref:This mail thread。

1

我有同样的感觉:)

min.num.spills.for.combine(默认值3)表示,如果你在你的工作组合和泄漏的数量是三个或更多(至少3 ),然后它会在映射输出写入本地磁盘之前调用。

请参阅从权威指南这个段:

如果指定了组合功能,和泄漏的数量是 至少三个(在min.num.spills.for.combine的值属性), 然后在写入输出文件之前运行组合器。回想一下 组合器可能会在输入上重复运行而不会影响最终结果 。重点在于运行组合器可以获得更多的压缩映射输出,因此写入本地磁盘的数据较少,要传输到还原器的数据较少。

+0

“回想一下,组合器可能会在输入上重复运行,而不会影响最终结果。” 这条线让我想起答案b) –

+0

恕我直言,合并将发生在合并器之后。 – Tariq