yarn app的状态 ALL, NEW, NEW_SAVING, SUBMITTED, ACCEPTED, RUNNING, FINISHED, FAILED, KILLED

转自:yarn RMApp-状态机实现 https://www.jianshu.com/p/cb98a72c94ab

状态机介绍

在RM内部维护着所有Application的状态。对于每个Application都有一个RMApp对象与之对应。在RMApp的实现类RMAppImpl中,维护着对象的基本信息,包括起始时间、名字、用户、组等信息,其中最复杂的部分莫过于其维护的状态机。

状态与转换解释

  • NEW
    RMApp的初始状态,当客户端通过RPC调用RM的submitApplication方法后,RM会初始化RMAppImpl,此时状态机的状态被设置为NEW。

  • NEW_SAVING
    表示RM在处理客户端提交作业的请求期间状态为NEW_SAVING。RM的submitApplication方法中,在返回给客户端前,RM会创建START事件,当NEW状态遇到START事件后,RMAppImpl的状态转换为NEW_SAVING。

  • SUBMITTED
    表示App已经提交成功,RM已经存下该App状态。两种情况下会转换为SUBMITTED状态:

    1.当RMAppImpl的状态由NEW转换为NEW_SAVING期间,会触发RMAppNewlySavingTransition的transition方法,在此方法中会调用RMStateStore存储RMAppImpl,事实上是在RMStateStore.ForwardingEventHandler中调用handleStoreEvent方法存储RMAppImpl,完成存储后会调用notifyDoneStoringApplication方法,在此方法中创建RMAppNewSavedEvent事件并交给rmDispatcher。RMAppImpl遇到RMAppNewSavedEvent(对应APP_NEW_SAVED)事件后,状态转换为SUBMITTED。

    2.在NEW状态下,如果是Recover模式,且该App存储在RMStateStore中,则转换为SUBMITTED。

  • ACCEPTED
    表示该App已经提交给调度器。
    在NEW_SAVING转换为SUBMITTED状态的时候,RMAppImpl会触发StartAppAttemptTransition,这时会创建一个新的RMAppAttempt,然后新建RMAppAttemptEventType.START事件给处理器,经过RMAppAttempt处理机。当该RMAppAttempt交给调度器(的某个组)后,状态改为ACCEPTED。

  • RUNNING
    AM已经启动并注册到RM上。两种情况下会转换为RUNNING状态:

    1. AM启动后会向RM注册,这时候会触发RMAppImpl状态转换为RUNNING状态。

    2. RMAppImpl也有可能在Recovery模式下转换为RUNNING。

  • FINAL_SAVING
    FINAL_SAVING状态表示正在保存RMAppImpl到存储器,目的是保证RMAppImpl的状态已经存储下来,当RMStateStore在完成App状态更新到存储器后会根据App的状态转换为最终状态,包括FAILED,FINISHED,FINISHING,KILLED。

    这个状态其实阻断了原来清晰的状态转换流程,如RUNNING在遇到RMAppEventType.ATTEMPT_FAILED时,转换为FINAL_SAVING状态,但是设置了targetedFinalState为RMAppState.FAILED,最终经过FINAL_SAVING后转换为RMAppState.FAILED状态。

  • FINISHING
    FINISHING状态表示RM上相应的App状态已经完成存储工作,在等待RMAppEventType.ATTEMPT_FINISHED事件。因为只有RMAppAttempt结束后RMApp才能结束。

    在RMAppState.RUNNING状态遇到RMAppEventType.ATTEMPT_UNREGISTERED事件时,RMAppImpl转换为FINAL_SAVING,并存储targetedFinalState为RMAppState.FINISHING,遇到RMAppEventType.APP_UPDATE_SAVED事件后RMAppImpl转换为FINISHING状态。

  • FINISHED
    RMAppImpl的结束状态(另外两个结束状态是KILLED和FAILED),正常情况下处于RUNNING的RMAppImpl成功结束后状态就是FINISHED,另外RM收到AM的REJECTED请求后最终状态也是FINISHED,即FINISHED状态是AM主动通知RM自己结束后的状态。

  • FAILED
    处于FINAL_SAVING的RMAppImpl遇到RMAppEventType. FAILED事件后RMAppImpl转换为FAILED状态。

  • KILLING
    RMAppImpl遇到客户端执行KILL操作后会转换为FINAL_SAVING状态,另外会设置RMAppImpl的targetedFinalState为RMAppEventType.KILL。

  • KILLED
    处于FINAL_SAVING的RMAppImpl遇到RMAppEventType.APP_UPDATE_SAVED事件后RMAppImpl转换为KILLED状态。



作者:晴天哥_374
链接:https://www.jianshu.com/p/cb98a72c94ab
来源:简书

  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值