4.4.3 InterTrackerProtocol通信协议

InterTrackerProtocol是TaskTracker与JobTracker之间的通信协议。TaskTracker通过该协议向JobTracker汇报所在节点的资源使用情况和任务运行状况,并接收和执行JobTracker返回的命令。

该协议中最重要的一个方法是heartbeat。它周期性地被调用,进而形成了TaskTracker与JobTracker之间的心跳。其定义如下:


HeartbeatResponse heartbeat(TaskTrackerStatus status,

boolean restarted,

boolean initialContact,

boolean acceptNewTasks,

short responseId)

throws IOException;


该函数的一个重要输入参数为TaskTrackerStatus类型的status。它封装了所在节点的资源使用情况(物理内存和虚拟内存总量和使用量,CPU个数以及利用率等)和任务运行情况(每个任务运行进度,状态以及所处的阶段等)。函数返回值类型为HeartbeatResponse。它包含了一个TaskTrackerAction类型的数组。该数组包含了JobTracker向TaskTracker传达的各种命令(我们将在7.4节详细介绍这几个命令),主要分为以下几种类型。

❑CommitTaskAction:Task运行完成,提交其产生的结果。

❑ReinitTrackerAction:重新对自己(TaskTracker)初始化。

❑KillJobAction:杀死某个作业,并清理其使用的资源。

❑KillTaskAction:杀死某个任务。

❑LaunchTaskAction:启动一个新任务。

该协议中其他几个均是getter方法,用于从JobTracker中获取信息:


//从JobTracker中获取某个作业已经完成的Task列表,这主要是为Reduce Task获取已完成的

Map Task列表,以便开始远程拷贝(shuffle)数据

TaskCompletionEvent[]getTaskCompletionEvents(JobID jobid, int fromEventId

,int maxEvents)throws IOException;

//获取JobTracker指定的系统目录,以便TaskTracker将作业相关的文件存放到该目录中

public String getSystemDir();

//获取JobTracker编译版本号,TaskTracker与JobTracker编译版本号一致才可启动

public String getBuildVersion()throws IOException;