根据定义,“Combiner 可以在 mapper 和 reducer 之间的每个键上被调用 0 次、1 次或多次。”
我想知道mapreduce框架是根据什么来决定cobiner启动多少次的。
最佳答案
只是溢出到磁盘的次数。 MapOutputBuffer
填满后进行排序,同时进行合并。
您可以使用参数 io.sort.mb
、io.sort.spill.percent
、io.sort 调整溢出到磁盘的数量。 record.percent
- 这些也在文档(书籍和在线资源)中进行了解释。
特定组合器运行次数的示例:
0 -> no combiner was defined
1 -> a combiner was defined and the MapOutputBuffer filled up once
>1 -> a combiner was defined and the MapOutputBuffer filled up more than once
请注意,即使 MapOutputBuffer
从未完全填满,此缓冲区也必须在映射阶段结束时刷新,从而触发组合器至少运行一次(如果已定义)。
关于hadoop - mapreduce 框架基于什么决定是否启动组合器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17160852/