RMAppAttempt是ResourceManager中用于维护一个Application Attempt生命周期的数据结构,它的实现是RMAppAttemptImpl,该类维护了一个Application Attempt状态机,记录了一个Application Attempt可能存在的各个状态以及导致状态间转换的事件,当某个事件发生时,RMAppAttemptImpl会根据实际情况进行Application Attempt状态转移,同时触发一个行为。

需要说明的是,在YARN中,每个application用数据结构RMApp表示,每个application可能会尝试运行多次,则每次运行尝试的整个运行过程用数据结构RMAppAttempt表示,如果一次运行尝试运行失败,则RMApp会创建另外一个运行尝试,直到某次运行尝试运行成功或者达到运行尝试运行上限。

如图所示,在RM看来,每个Application Attempt有13种基本状态(RMAppAttemptState)和15种导致这13种状态之间发生转移的事件(RMAppAttemptEventType),RMAppAttemptImpl的作用是等待接收其他对象发出的RMAppAttemptEventType类型的事件,然后根据当前状态和事件类型,将当前状态转移到另外一种状态,同时触发另外一种行为(实际上执行一个函数,该函数可能会再次发出一种其他类型的事件)。下面具体进行介绍:

基本状态

  • NEW

状态机初始状态,每个Application对应一个状态机,而每个状态机的初始状态为NEW。

  • SUBMITTED

客户端通过RPC函数ClientRMProtocol.submitApplication向RM提交一个Application,通过合法性验证后,RM会将Application Attempt状态置为SUBMITTED。

  • SCHEDULED

客户端提交Appliation后,ResourceManager通知ResouceScheduler,ResouceScheduler将之置为SCHEDULED状态,表示开始为该Application的ApplicationMaster分配资源。

  • ALLOCATED_SAVING

ResouceScheduler将一个Container分配给该Application Attempt的ApplicationMaster(用于启动该ApplicationMaster),则该Application Attempt将被置为ALLOCATED_SAVING状态。

  • ALLOCATED

ResourceManager将分配给ApplicationMaster的container信息保存到文件中,以便于失败后从磁盘上恢复,经持久化存储的Application Attempt状态为ALLOCATED。

  • LAUNCHED

ResourceManager中的ApplicationMasterLauncher与对应的NodeManager通信,启动ApplicationMaster,此时Application Attempt将被置为LAUNCHED状态。

  • RUNNING

RM创建的Application Attempt在对应的NodeManager上成功启动,并通过RPC函数AMRMProtocol.registeApplicationMaster()向ResourceManager注册,此时Application Attempt状态被置为RUNNING。

  • FAILED

Application的ApplictionMaster运行失败,导致Application Attempt的状态被置为FAILED。

  • KILLED

Application Attempt收到KILL事件,将被置为KILLED。

  • FINISHING

Application Master通过RPC函数AMRMProtocol.finishApplicationMaster()通知RM,自己运行结束,此时Application处于FINISHING状态。

  • FINISHED

NodeManager通过心跳汇报ApplicationMaster所在的Container运行结束,此时Application被置为FINISHED状态。

  • LAUNCHED_UNMANAGED_SAVING

为了方便对ApplictionMaster进行测试和满足特殊情况下对权限的要求,ResourceManager允许用户直接将Application的ApplicationMaster启动在客户端中。

  • RECOVERED

ApplicationAttempt从文件中恢复状态。

基本事件

RMAppAttempt中涉及到的15种事件类型来源如下图所示:

原创文章,转载请注明: 转载自董的博客

本文链接地址: YARN/MRv2 Resource Manager深入剖析—RMAppAttempt状态机分析

微信公众号:hadoop-123,专注于大数据技术分享,欢迎加入!

说点什么

avatar
  Subscribe  
提醒