combiner是否有条件地运行

92vpleto  于 2021-06-03  发布在  Hadoop
关注(0)|答案(2)|浏览(396)

min.num.spills.for.combine(默认值3)
它意味着什么?
a) 合路器运行所需的最小Map数?所以即使我们指定了一个组合器,它也不能保证运行吗?
b) 合并器在通过io.sort.factor创建的合并/排序的单个文件上运行之前的最小溢出数。因此,每次通过合并创建一个新文件时,合并器都会运行到该文件上,前提是溢出数至少为3
我觉得正确的答案是a),但谁能证实这一点呢。

70gysomp

70gysomp1#

当map函数生成中间结果并首先将它们发送到缓冲区时,将启动分区和排序,如果指定了组合器,则此时将调用它。此过程与map函数并行。当map函数完成时,磁盘上的所有溢出都将被合并,此时也将调用合并器。
缓冲区阈值受 io.sort.spill.percent ,在此期间会产生溢出。如果泄漏的数量超过 min.num.spills.for.combine ,在写入磁盘之前创建的溢出上调用组合器。
所以回答你的问题:你是对的,这是一个选择。
参考:这个邮件线程。

j7dteeu8

j7dteeu82#

我也有同感:)
min.num.spips.for.combine(默认值3)表示如果您的作业中有一个合并器,并且溢出的数量是三个或更多(至少3个),那么在将Map输出写入本地磁盘之前,它将被调用。
参见本段的最终指南:
如果指定了组合器函数,并且溢出数至少为3(min.num.spips.for.combine属性的值),则在写入输出文件之前运行组合器。回想一下,组合器可以在输入上重复运行,而不影响最终结果。关键是,运行合并器可以获得更紧凑的map输出,因此要写入本地磁盘和传输到reducer的数据更少。

相关问题