我注意到通常当hadoop集群不忙时,在map端完全完成之前,reduce端开始进行?这怎么可能?我记得在某处读过减少进度指示器的内容有些误导,但记不清了。有人可以解释一下吗?
问问题
344 次
3 回答
6
33 1 / 3 % 的 reduce 任务进度指示器正在复制地图输出。(另外 33 1 / 3 % 正在对它们进行排序,最后 33 1 / 3 % 构成对 reduce() 方法的实际调用。)映射器一直在完成,并且您配置的尽可能多的 reduce 任务正在拉取这些输出一旦准备好就立即完成,因此在任何 reduce() 调用发生之前,第一轮 reduce 阶段的2 / 3将完成。
于 2012-05-23T06:46:31.743 回答
2
除了已经给出的答案之外,此行为由 mapred 属性控制mapred.reduce.slowstart.completed.maps
,它表示在复制阶段开始之前必须完成的映射任务的百分比 (0-1)。
于 2012-05-23T10:30:19.607 回答
0
这是因为 reducer 必须将 map 输出复制到 reduce 任务运行的节点。如果一个 map 任务已经完成并提交了它的输出,你可以直接传输它并将它们合并到 reducer 中已经可用的数据中。
所以这将为您节省大量时间,而不是等到所有映射器完成。
于 2012-05-23T05:28:31.610 回答