min.num.spills.for.combine(默认3)
它意味着什么?
a)分钟号一张地图溢出来让一个合成器运行?那么即使我们指定了一个组合器,它也不能保证运行?
b)分钟号组合器在通过io.sort.factor创建的合并/排序单个文件上运行之前的溢出。因此,每次通过合并创建一个新文件时,组合器就会运行,只要没有。溢出的时间是3分钟
我觉得正确答案是a),但任何人都可以确认。
答案 0 :(得分:1)
当map函数生成中间结果并首先将它们发送到缓冲区时,分区和排序将开始,如果指定了组合器,则此时将调用它。此过程与地图功能并行。当map函数完成时,磁盘上的所有溢出都将被合并,此时也将调用合并器。
缓冲区阈值受io.sort.spill.percent
限制,在此期间会创建溢出。如果溢出次数超过min.num.spills.for.combine
,则在写入磁盘之前创建的溢出时会调用合并器。
所以回答你的问题:你是对的,这是选择a)。
参考:This邮件主题。
答案 1 :(得分:1)
我有同感:)
min.num.spills.for.combine(默认为3)表示如果你的作业中有一个合并器,并且溢出的数量是三个或更多(至少3个),那么它将在地图输出之前被调用被写入本地磁盘。
参见权威指南中的这一段:
如果指定了组合器功能,则溢出次数为 至少三个(min.num.spills.for.combine属性的值), 然后在写入输出文件之前运行组合器。召回 组合器可以在输入上重复运行而不会影响 最后的结果。重点是运行组合器可以实现更多功能 紧凑的地图输出,因此写入本地磁盘的数据较少 转移到减速机。