TaskTracker内部原理——TaskTracker启动过程和心跳机制

启动过程

TaskTracker是一个独立的服务,有一个对应的main函数启动它。
TaskTracker构造函数中初始化一些重要对象和线程,再run方法中维护一个与JobTracker的通信连接,以周期性地向JobTracker发送心跳并领取新的任务。

变量初始化

在这里插入图片描述

对象初始化

在这里插入图片描述在这里插入图片描述

心跳机制

单次心跳发送

TaskTracker会主动汇报信息并领取对应的命令,TaskTracker周期性向JobTracker汇报信息并领取任务形成心跳。

在这里插入图片描述

状态发送

TaskTracker发送的信息被封装到可序列化类TaskTrackerStatus中,每次发送心跳,就重新构造一个TaskTrackerStatus。

TaskTrackerStatus有三个重要变量:taskReport、healthStatus、resStatus。

taskReport

taskReport保存当前TaskTracker上所有任务(实际为Task Attempt)的运行状态。

healthStatus
保存当前节点健康状态。
healthStatus有NodeHealthCheckerService线程计算得到的,该线程允许管理员配置一个“健康检测脚本”,检查节点健康状况。该线程周期性调用健康检测脚本并检查其输出,如果输出是“ERROR”开头的字符串,则认为节点不健康, 标注为unhealthy,并通过心跳告诉JobTracker,JobTracker得知节点状态变为unhealthy后,将其加入黑名单。如果发现变为healthy,就从黑名单移除。

好处:

  • 作为节点负载的反馈:可让健康检测脚本检查网络、磁盘、文件系统等运行状况、一旦发现特殊情况,比如网络拥塞、磁盘空间不足、或者文件系统出现问题,可将健康状况变为unhealthy。
  • 人为暂时维护TaskTracker,如果发现TaskTracker所在节点出现故障,可通过控制简本输出暂时让该Task Tracker停止接收新任务以便进行维护,维护完了再改脚本输出,继续接收新任务。

resStatus
保存当前TaskTracker资源使用情况,该变量对应ResourceStatus类。

命令执行

JobTracker将心跳应答封装到一个HeartbeatResponse对象中,该对象主要包括:①作业集合recoveredJobs,主要是上次关闭JobTracker时正在运行的作业集合,重启JobTracker后要恢复这些作业的运行状态②需要执行的命令列表

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值