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;