JobTracker为一个后台进程。首先由源代码入手,看一下JobTracker是如何启动起来的。
在JobTracker的main函数中有两行核心代码:
JobTracker tracker = startTracker(new JobConf());
tracker.offerService();
首先创建JobTracker类的对象,然后开启JobTracker的必要的服务。
①startTracker方法即为对一些重要的对象进行初始化。其中包括DelegationTokenSecretManager、ACLsManager、taskScheduler、interTrackerServer、infoServer、dnsToSwitchMapping等。
ACLsManager:权限管理类。包括作业权限(查看权限、修改权限)和队列权限(作业提交权限、作业管理权限)
dnsToSwitchMapper:将IP地址或DNS节点名转换为网络位置。安装/数据中心/机架/节点。
可以编写脚本程序来解析,并在配置文件中指定使用该脚本程序进行解析。
②offerService方法会启动JobTracker内部几个比较重要的后台服务进程,分别进行说明:
expireTrackersThread:用于发现和清理死掉的TaskTracker。通过心跳来检测,一旦10分钟内未收到心跳,则认为它已经死掉,然后将它的相关信息从数据结构maps中清除,并同时将在它之上运行的task标注为KILLED_UNCLEAN。
retiredJobsThread:用于清理长时间驻留在内存中已经完成的作业信息。当然是在满足一定的条件后才能清除,并且也不是直接删除,而是放到过期队列中,超过配置的队列长度后再彻底删除。
expireLaunchingTaskThread:用于发现分配给TaskTracker但一直未汇报信息的task。将其状态标注为Failed。
completedJobsStoreThread:将已经完成的作业运行信息保存到HDFS上。以供查询任意时间提交的作业和还原作业的运行信息。
③作业恢复机制:这是为了解决JobTracker的单点故障问题。
由JobHistoryServer和RecoveryManager负责。