6.6.2 1.0.0版本的算法
如果一个任务满足以下条件,则会为该任务启动一个备份任务:
❑该任务尚未进入skip mode(由于推测执行机制和跳过坏记录机制均会减慢任务执行进度,考虑到性能问题,不会同时启用这两个功能)。
❑该任务没有其他正在运行的备份任务(当前Hadoop最多允许一个任务同时启动两个Task Attempt)。
❑该任务已经运行时间超过60秒且当前正在运行的Task Attempt落后(同一个作业所有Task Attempt的)平均进度的20%,即对于任意一个任务i,如果满足:
则任务i将被当作“拖后腿”任务,进而需为其启动备份任务。
当该任务的某个Task Attempt成功运行完成后,JobTracker会杀掉另外一个Task Attempt。
该版本实现的推测执行功能存在很多问题,以下是几个常见问题。
❑适用情况考虑不全:当作业的大部分任务已经运行完成时,如果存在若干个TaskAttempt的运行进度等于或者超过80%,则此时总不会启动备份任务。
❑缺乏保证备份任务执行速度的机制:由于新启动的备份任务需要首先处理原始Task Attempt已经处理完的数据,因此需保证备份任务的运行速度不低于原始Task Attempt,否则将失去启动备份任务的意义。
❑参数不可配置:比如上面的数值“60秒”和“20%”均不可配置,这不能满足用户根据自己集群特点定制参数的要求。