gpt4 book ai didi

hadoop - 如何保证 combiner 在 map/reduce 中至少运行一次?

转载 作者:可可西里 更新时间:2023-11-01 14:22:08 27 4
gpt4 key购买 nike

从一些文章中,我知道combiner会在mapper端和reducer端运行,并且会运行0~N次。而且我知道无论是否调用组合器,我们的 mapreduce 程序都应该得到相同的结果。

但我有一种特殊情况需要组合器至少被调用一次,有人知道如何确保这一点吗?

PS,在maptask.java中,我看到了这行:

if (null == combinerClass || numSpills < minSpillsForCombine) {
Merger.writeFile(kvIter, writer, reporter);
} else {
combineCollector.setWriter(writer);
combineAndSpill(kvIter, combineInputCounter);
}

如果我将 minSpillsForCombine 设置为零,我能否确保组合器至少被调用一次?

非常感谢!

最佳答案

  • 在溢出期间,在溢出线程写入磁盘之前,线程首先将数据分成分区,这些分区对应于它们最终将被发送到的reducer。
  • 在每个分区内,后台线程按键执行内存中排序,如果有组合函数,则在排序的输出上运行
  • 如果至少有三个溢出文件,组合器会在写入输出文件之前再次运行
  • 您可以通过覆盖以下属性来更改这个魔数(Magic Number) 3:ma​​preduce.map.combine.minspills
  • 组合器可以在输入上重复运行而不影响最终结果。
  • 如果只有一两次溢出, map 输出大小的潜在减少不值得调用组合器的开销

希望这对您有所帮助。

关于hadoop - 如何保证 combiner 在 map/reduce 中至少运行一次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17848472/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com