在MR的计算模型中,过早启动Reduce,reduce会空等map的完成,这是资源浪费,这个资源完全可以用来执行真正需要执行的任务。
Corona的实现中,同样考虑了Reduce的延时启动。主要是下面三个单数来进行判断:
# 当前job的最小map门限,如果一个job的未执行完毕的map数达到这个门限,则开始reduce的启动
public static final String RUSH_REDUCER_MAP_THRESHOLD = mapred.job.rushreduce.map.threshold(最小map数)
#同上,job的reduce门限
public static final String RUSH_REDUCER_REDUCE_THRESHOLD = mapred.job.rushreduce.reduce.threshold(最小Reduce数)
# map执行完成的百分比,达到这个比例在开始启动reduce
mapred.reduce.slowstart.completed.maps(默认0.05F)
代码判断逻辑如下: