作业提交到ResourceManager以后会有状态机的变迁过程,如下为详细状态机分析,使用的是Hadoop 2.6.0的版本进行源码分析的状态机,本篇文章主要是RM端核心的状态机变迁,之后会另外写一篇AM端,即在NodeManager上面的核心状态机变迁:
-
用户通过Client端的ApplicationClientProtocol协议向ResourceManager的ClientRMService提交作业。
-
当ResourceManger的ClientRMService收到应用程序以后,然后调用RMAppManager的submitApplication函数,然后在RMAppManager的submitApplication函数的函数中创建RMAppImpl对象,用来管理维护整个应用程序的生命周期,创建的时候他的初始状态是NEW状态,然后收到RMAppEventType.START事件。
-
这个START事件将会由总的事件分发器AsyncDispatcher接受,AsyncDispatcher类对象 rmDispatcher 是在ResourceManager serviceInit()过程中创建的。在ResourceManager的内部类RMActiveServices 中的serviceInit()过程中,还给这个rmDispatcher 注册了很多EventHandler事件类。AsyncDispatcher接受到START事件然后将其加入总的事件队列eventQueue,当AsyncDispatcher处理到该事件的时候,会将事件交给对应的事件处理器处理,这里对应的是ApplicationEventDispatcher处理器,处理完之后RMAppImpl的状态变为NEW_SAVING状态。
-
当RMStateStore保存完RMApp的相关信息后