应用程序在RM中的完整运行流程分析

博学谷提供支持

(1)用户通过Client端使用MRClientProtocol协议向ResourceManager的ClientServer提交应用程序。

(2)当ResourceManager端的ClientServer收到应用程序后,首先会为Application创建一个RMAppImpl对象来维护其整个运行生命周期,记录Application运行过程中存在的每一个状态,并将其初始状态置为NEW状态,接着会产生START(RMAppEventType类型)事件。

(3)START事件会交给中央处理器(AdyncDispatcher)来处理,中央处理器(AdyncDispatcher)会将该事件放入总事件队列中(Even Queue),当中央处理器处理到该事件时将首先匹配其事件所属的事件类型,然后将其交给对应类型的子处理器来处理该事件,随后Application的状态将会变迁为NEW_SAVING状态。

(4)在保存完Application的初始信息后,会产生APP_NEW_SAVED(RMAppEventType类型)事件,当处理器ApplicationEventDispatcher接到APP_NEW_SAVED事件时会将Application的状态变迁为SUBMITTED状态。

(5)在Application的状态变迁为SUBMITTED状态的同时,会相应生成RMAppAttemptImpl对象用于维护Application的运行尝试的整个生命周期。并且将其状态设置为NEW状态,接着会产生START(RMAppAttemptEventType类型)事件。

(6)当中央处理器接收到该START(RMAppAttemptEventType类型)事件时将其交给ApplicationAttemptEventDispatcher来处理,ApplicationAttemptEventDispatcher会将该RMAppAttempt的状态变迁为SUBMITTED状态。

(7)RMAppAttempt将会向ApplicationMasterService申请注册。

(8)在注册完成后将会向ResourceScheduler发送一个AppAddedSchedulerEvent事件。

(9)ResourceScheduler收到AppAddedSchedulerEvent事件后会创建一个APPSheduler对象。

(10)在创建APPSheduler对象完成后,同时产生APP_ACCEPTED事件,RMAppAttempt对象的状态将会变为SCHEDULED状态。

(11)接着APPSheduler会调用allocate函数为ApplicationMaster申请一个Container,该Container将被用于运行Application的第一个类。

(12)当APPSheduler发出申请Container的请求后,将会等待某个合适的NodeManager通过心跳机制来汇报自己的资源使用情况,如果有合适的资源将对其进行分配。

(13)当资源分配成功后Container将向RMAppAttemptImpl发送一个APP_ALLO CATED事件。

(14)当ApplicationAttemptEventDispatcher处理器捕获到APP_ACCEPTED后就会将RMAppAttempt的状态变迁为ALLOCATED_SAVING状态,在这三个状态会将Container的基本信息写入硬盘,以便故障时恢复。

(15)在Container的基本信息保存完毕后将会产生ATTEMPT_NEW_SAVED事件,接着将状态变迁为ALLOCATED状态,同时将触发MLauncherEventType.LAUNCH事件。

(16)MLauncherEventType.LAUNCH事件被ApplicationMasterLauncher捕获后将首先创建一个AMluncher对象,接着AMluncher对象会调用AMLauncher.launch()函数,在AMLauncher.launch()函数内部会调用ContainerManager.startContainer()函数来启动该Container。

(17)同时会添加一个AMLivenessMonitor来对该Container的运行情况进行监控,并且会触发RMAppAttemptEventType.LAUNCHED事件。

(18)当事件处理器ApplicationAttemptEventDispatcher捕获到该LAUNCHED事件时,会将状态变迁为LAUNCHED状态。

(19)接下来ApplicationMaster会与ResourceManager协商要求NodeManager启动Container,之后ApplicationMaster将会向ResourceManager注册自己,注册成功后将触发一个REGISTERED事件。

(20)当ApplicationAttemptEventDispatcher捕获到REGISTERED事件时,将会把RMAppAttempt的状态置为RUNNING状态。

(21)接着向RMAppImpl发送一个ATTEMPT_REGISTERED事件,然后RMApp的状态将会被置为RUNNING状态。此时三个状态机都进入了RUNNING状态,该Application的ApplicationMaster创建与注册完毕,接下来ApplicationMaster会根据Application的资源需求向ResourceManager请求资源,同时监控各个子任务的执行情况。

(22)当某个Container中的应用程序运行完成后将会被NodeManager加入到已完成任务的Container列表中,NodeManager会通过心跳来通知ResourceManager,会触发FINISHED事件,接着RMContainer的状态将会变迁为COMPLETED。

(23)当应用程序的运行其他程序的Container的状态都被置为COMPLETED状态后,将触发CONTAINER_FINISHED事件,该事件会被ApplicationAttemptEventDispatcher捕获,之后RMAppAttempt状态将被置为FINAL_SAVING状态。

(24)在FINAL_SAVING状态将会把一系列的运行结果以及运行情况写入硬盘,写入完毕后RMAppAttempt状态将变迁为FINISHED状态。

(25)然后将通知RMAppImpl程序以及运行完毕产生ATTEMPT_FAILED事件,RMAppImpl的状态将变迁为FINAL_SAVING状态。

(26)在保存完运行完成信息后将触发APP_UPDATE_SAVED事件,然后将RMApp的状态置为FINISHED状态,至此整个应用程序的运行结束。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值