大任務通常有成百上千個task,在任務即將執行完成時,總有幾個task會拖後腿,corona的實現中,也考慮了備份執行,
對執行慢的任務,啓動一個他的clone,誰先執行完,kill掉另外一個。
首先計算門限,後續判斷是否達到門限
SPECULATIVECAP = "mapreduce.job.speculative.speculativecap";(默認0.1,推測執行的比率,乘以runningTasks爲可以啓動的推測任務數,一個task只啓動1個,一個job的多個task可以啓動多個)
MIN_SPEC_CAP(至少啓動的推測任務數,默認10)
SPECULATIVE_REFRESH_TIMEOUT = "mapreduce.job.speculative.refresh.timeout";(刷新任務進度,默認5000L)
SPECULATIVE_REDUCE_UNFINISHED_THRESHOLD_KEY = "mapred.reduce.tasks.speculation.unfinished.threshold";(默認0.001F,Red全部推測門限)