组合器是否有条件地运行

时间:2013-07-31 18:50:44

标签: hadoop mapreduce combiners

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

它意味着什么?

a)分钟号一张地图溢出来让一个合成器运行?那么即使我们指定了一个组合器,它也不能保证运行?

b)分钟号组合器在通过io.sort.factor创建的合并/排序单个文件上运行之前的溢出。因此,每次通过合并创建一个新文件时,组合器就会运行,只要没有。溢出的时间是3分钟

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

2 个答案:

答案 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属性的值),   然后在写入输出文件之前运行组合器。召回   组合器可以在输入上重复运行而不会影响   最后的结果。重点是运行组合器可以实现更多功能   紧凑的地图输出,因此写入本地磁盘的数据较少   转移到减速机。