JobTracker内部原理——Job和Task运行时的信息维护

作业描述模型

在这里插入图片描述
”三叉树“作业描述方式:

JobTracker为每个作业创建一个JobInProgress对象以跟踪和监控其运行状态,该对象存在于作业整个运行过程,作业提交时就创建,作业运行完成时就销毁。同时,为了采用分治的策略解决问题,JobTracker将每个作业拆分成若干个任务,并为每个任务创建一个TaskInProcess对象以跟踪和监控其运行状态,任务运行可能失败,JobTracker会按照一定的策略重新运行,所以每个任务可能尝试多次,直到成功,JobTracker每运行一次任务称为一次”任务运行尝试“,即Task Attempt,对于一个任务,只要有一个Task Attempt成功,相应的TaskInProcess就标注 该任务成功,当所有TaskInProcess均标注其对应的任务成功后,JobInProcess对象会标识整个作业运行成功。
为了区分各个作业,JobTracker赋予每个作业一个唯一的ID,命名方式:作业前缀字符串_JobTracker启动时间_提交顺序,比如job_201208071706_0009。
为了区分每个任务,每个任务的ID集成了作业的ID,在基础上扩展,由 作业ID、任务类型、任务编号组成,比如task_201208071706_0009_m_000000,m标识任务类型为map
每个Task Attempt的ID继承Task的ID,两部分组成,任务ID和运行尝试次数,比如attempt_201208071706_0009_m_00000_0,表示taskattempt_201208071706_0009_m_00000的第0次尝试。

JobInProcess

JobInProcess主要负责监控和跟踪作业运行状态,并为调度器提供最底层的调用接口。
JobInProcess维护了两种作业信息,静态和动态信息。
作业静态信息是作业提交时就确定的属性信息,比如MapTask个数,Reduce Task个数,每个Map Trask需要的内存量、每个Reduce Task需要的内存量等等。。
作业动态信息是作业运行过程中会动态变化的信息,对于发现TaskTracker、Job 、Task故障非常有用。比如正在运行的Map Task、Reduce Task、运行完成的Task、失败的Task Attempt。。。

TaskInProcess

维护Task运行过程中的全部信息,一个任务可能多次执行,所以多个Task Attempt,这些任务被同个TaskInProcess对象管理和跟踪,只要其中一个成功,TaskInProcess就会标注成功。

作业和任务状态转换图

在这里插入图片描述
作业状态转移由JobInProcess更新。
PREP->RUNNING:作业的setup task成功执行
RUNNING->SECCEEDED:作业的cleanup task执行成功
PREP->FAILED/KILLED:人为杀死作业
RUNNING->FALIED:人为杀死、作业失败都可能导致

在这里插入图片描述

  • UNASSIGNED->RUNNING:任务初始化状态为UNASSIGNED,当JobTracker将任务分配给某个TaskTracker后,该TaskTracker会为它准备运行环境并启动它,之后该任务进入RUNNING状态。
  • RUNNING->COMMIT_PENDING:该状态转换存在于产生最终结果的任务(Reduce Task或者map_only类型作业的Map Task)中,当任务处理完最后一条记录后进入COMMIT_PENDING状态,等待JobTracker批准其提交最后结果。
  • RUNNING->SUCCEEDED:该状态转换存在于Map Task中,当Map Task处理完最后一条记录变意味着任务运行成功。
  • RUNNING\COMMIT_PENDING->KILLED_UNCLEAN:TaskTracker收到来自JobTracker的KillTaskAction命令后,就会导致这个状态改变,通常产生的场景是人为杀死任务、同个TIP中有Task Attempt成功而杀死其他Task Attempt、TaskTracker超时
  • RUNNING\COMMIT_PENDING-FAILED_UNCLEAN:本地文件读写错误、shuffle阶段错误、任务在一定时间内没有汇报进度、内存使用量超过期望值或者其他运行过程中出现的错误
  • UNASSIGNED->FALIED/KILLED:人为杀死
  • KILLED_UNCLEAN/FAILED_UNCLEAN->FAILED/KILLED:一旦任务进入KILLED_UNCLEAN/FAILED_UNCLEAN状态,接下来必进入FAILED/KILLED状态,以清理已经写入HDFS上的部分结果。
  • SUCCEEDED->KILLED:一个TIP已经有一个Task Attempt完成,备份任务也汇报成功,则备份任务将杀死某个Task
  • SUCCEEDED/COMMIT_PENDING_FAILED:Reduce Task从Map Task远程读取数据时,发现数据损坏或者数据丢失,则将对应的Map Task状态标注为FAILED以便重新得到调度。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值