1

min.num.spills.for.combine(默认 3)

它意味着什么?

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

b) 最小编号。在组合器在通过 io.sort.factor 创建的合并/排序的单个文件上运行之前发生的溢出。因此,每次通过合并创建新文件时,组合器都会在其上运行,前提是没有。泄漏量最少 3

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

4

2 回答 2

1

我有同样的感觉 :)

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

请参阅权威指南中的此段:

如果已指定组合器函数,并且溢出次数至少为 3(min.num.spills.for.combine 属性的值),则在写入输出文件之前运行组合器。回想一下,组合器可以在输入上重复运行而不影响最终结果。关键是运行组合器会产生更紧凑的映射输出,因此写入本地磁盘和传输到减速器的数据更少。

于 2013-07-31T19:03:34.297 回答
1

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

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

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

参考:这个邮件线程。

于 2013-07-31T19:00:24.720 回答