【发布时间】:2015-09-30 13:17:23
【问题描述】:
如果在所有映射器完成之前减速器没有启动,那么为什么 MapReduce 作业的进度会显示类似 Map(50%) Reduce(10%) 的内容?为什么在mapper还没完成的时候显示reducers进度百分比?
【问题讨论】:
-
不是完全重复,但很确定stackoverflow.com/questions/11672676/… 回答了你的问题
如果在所有映射器完成之前减速器没有启动,那么为什么 MapReduce 作业的进度会显示类似 Map(50%) Reduce(10%) 的内容?为什么在mapper还没完成的时候显示reducers进度百分比?
【问题讨论】:
这是因为mapreduce.job.reduce.slowstart.completedmaps 属性的默认值为0.05。
这意味着一旦至少 5% 的总映射器完成执行,reducer 阶段就会开始。
所以分派的reducer将继续停留在复制阶段,直到所有的mapper完成。
如果您希望仅在所有映射器都完成后启动 reducer,请在作业配置中为给定属性配置 1.0 值。
【讨论】:
Reducer 开始从映射器复制中间键值对,一旦它们可用。进度计算还考虑了由reduce过程完成的数据传输处理,因此只要映射器的任何中间键值对可用于传输到reducer,reduce进度就会开始显示。虽然 reducer 进度更新了,但程序员定义的 reduce 方法只有在所有映射器完成后才会调用
【讨论】: