在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)
代碼判斷邏輯如下: