大任务通常有成百上千个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_MAP_UNFINISHED_THRESHOLD_KEY = "mapred.map.tasks.speculation.unfinished.threshold";(默认0.001F,Map全部推测门限)
SPECULATIVE_REDUCE_UNFINISHED_THRESHOLD_KEY = "mapred.reduce.tasks.speculation.unfinished.threshold";(默认0.001F,Red全部推测门限)
SPECULATIVE_REDUCE_UNFINISHED_THRESHOLD_KEY = "mapred.reduce.tasks.speculation.unfinished.threshold";(默认0.001F,Red全部推测门限)