min.num.spills.for.combine(默认3)组合器是否有条件运行
它表示什么?
a)最小号码。地图溢出让组合器运行?所以,即使我们已经指定了一个组合器,它不能保证运行?
b)最小号码。在合并器运行在通过io.sort.factor创建的合并/排序的单个文件之前有溢出。所以每次通过合并创建一个新文件时,组合器都会运行到该文件上,前提是没有。的溢出是最小3
我觉得正确的答案是a),但任何人都可以证实。
min.num.spills.for.combine(默认3)组合器是否有条件运行
它表示什么?
a)最小号码。地图溢出让组合器运行?所以,即使我们已经指定了一个组合器,它不能保证运行?
b)最小号码。在合并器运行在通过io.sort.factor创建的合并/排序的单个文件之前有溢出。所以每次通过合并创建一个新文件时,组合器都会运行到该文件上,前提是没有。的溢出是最小3
我觉得正确的答案是a),但任何人都可以证实。
当map函数生成中间结果并首先将它们发送到缓冲区时,分区和排序将开始,如果指定了组合器,则此时将调用它。该过程与地图功能并行。当map函数完成时,磁盘上的所有溢出将被合并,组合器也将在此时被调用。
缓冲区阈值受限于io.sort.spill.percent
,在此期间会产生溢出。如果溢出的数量超过min.num.spills.for.combine
,则组合器会在写入磁盘之前创建的溢出调用。
所以要回答你的问题:你是对的,它是选择a)。
Ref:This mail thread。
我有同样的感觉:)
min.num.spills.for.combine(默认值3)表示,如果你在你的工作组合和泄漏的数量是三个或更多(至少3 ),然后它会在映射输出写入本地磁盘之前调用。
请参阅从权威指南这个段:
如果指定了组合功能,和泄漏的数量是 至少三个(在min.num.spills.for.combine的值属性), 然后在写入输出文件之前运行组合器。回想一下 组合器可能会在输入上重复运行而不会影响最终结果 。重点在于运行组合器可以获得更多的压缩映射输出,因此写入本地磁盘的数据较少,要传输到还原器的数据较少。
“回想一下,组合器可能会在输入上重复运行,而不会影响最终结果。” 这条线让我想起答案b) –
恕我直言,合并将发生在合并器之后。 – Tariq