如果reducers没有在所有mapmapers完成之前启动,那么为什么MapReduce作业的进度显示为Map(50%) Reduce(10%)?为什么mapper尚未完成时显示reducers进度百分比?
这是因为mapreduce.job.reduce.slowstart.completedmaps
属性的默认值是0.05
。
表示至少有5%的映射器完成了执行,reducer阶段就会启动。
因此,分派的reducer将继续停留在拷贝阶段,直到所有映射器完成。
如果您希望在所有映射器完成后才启动reducer,则在作业配置中为给定属性配置1.0
值。
reducer在中间键值对可用时就开始从映射器复制它们。进度计算还考虑了数据传输的处理,这是由reduce进程完成的,因此,只要映射器的任何中间键值对可以传输到reducer, reduce进程就会开始显示。尽管reducer进程被更新了,但是程序员定义的reduce方法只有在所有映射器完成后才会被调用