任务的推测执行
一个作业由若干个map任务·和reduce任务组成,因为硬件的老化和软件bug等因素,会导致某些任务运行缓慢。
当发现拖后腿的任务时,比如某个任务的运行速度远慢于平均速度;就位拖后腿的任务启动一个备份任务,同时运行。谁先运行完就采用谁的结果。
执行推测任务的前提条件
1每个Task只能有一个备份任务
2当前job已完成的Task进度不少于5%
3开启推测执行参数。(mapred-site.xml默认是开启的)
不能使用推测执行机制的条件限制
1任务间存在严重的负载倾斜(比如一个任务量10g;一个任务量1g)
2一些特殊任务(比如向数据库中写数据)
推测执行算法原理
假设某一时刻,任务T的执行进度为progress,则可通过一定的算法推测出任务的最终完成时刻estimateEndTime。如果此时为该任务启动一个备份任务,则可推断出它可能的完成时刻estimateEndTime*。
estimateRunTime =(currentTimestamp - taskStartTime)/ progress
推测运行时间(60s)=( 当前时刻(6)- 任务启动时刻(0))/ 任务运行比例(10%)
.
.
.
e