4.3.3 失败重试和黑名单
除了选择合适的Task
调度运行外,还需要监控Task
的执行状态,前面也提到,与外部打交道的是SchedulerBackend
,Task
被提交到Executor
启动执行后,Executor
会将执行状态上报给SchedulerBackend
,SchedulerBackend
则告诉TaskScheduler
,TaskScheduler
找到该Task
对应的TaskSetManager
,并通知到该TaskSetManager
,这样TaskSetManager
就知道Task
的失败与成功状态,对于失败的Task
,会记录它失败的次数,如果失败次数还没有超过最大重试次数,那么就把它放回待调度的Task
池子中,否则整个Application
失败。
在记录Task
失败次数过程中,会记录它上一次失败所在的Executor Id
和Host
,这样下次再调度这个Task
时,会使用黑名单机制,避免它被调度到上一次失败的节点上,起到一定的容错作用。黑名单记录Task
上一次失败所在的Executor Id
和Host
,以及其对应的“拉黑”时间,
“拉黑”时间是指这段时间内不要再往这个节点上调度这个Task
了。