7.4 TaskTracker行为分析
TaskTracker通过心跳机制从JobTracker端获取各种命令,包括启动新任务、提交任务、杀死任务、杀死作业和重新初始化等。在Hadoop中,存在多种场景使得JobTracker下达这些命令。比如,对于“杀死任务”命令而言,可能是人为通过Shell命令杀死任务,也可能由于任务超量使用内存,由框架直接将其杀死。在本节中,我们为每个命令选取一种场景来讲解其执行全过程。
7.4.1 启动新任务
TaskTracker出现空闲资源后,会通过心跳从JobTracker端索取任务,并按照一定步骤启动该任务,之后一直监控并汇报其运行状态,直到它运行成功。新任务启动过程如图7-3所示。
图 7-3 新任务启动序列图
1)TaskTracker出现空闲资源,将资源使用情况通过心跳汇报给JobTracker;
2)JobTracker收到信息后,解析心跳信息,发现TaskTracker上有空闲的资源,则调用调度器模块的assignTasks()函数为该TaskTracker分配任务;
3)JobTracker将新分配的任务封装成一个或多个LaunchTaskAction对象,将其添加到心跳应答中返回给TaskTracker;
4)TaskTracker收到心跳后,解析出LaunchTaskAction对象,并创建JVM启动任务;
5)当Counter值或者进度发生变化时,任务通过RPC函数将最新Counter值和进度汇报给TaskTracker;
6)TaskTracker通过心跳将任务的最新Counter值和进度汇报给JobTracker。
我们将在7.5节详细剖析TaskTracker启动新任务的整个过程。