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