Container状态机详解
来源:未知 责任编辑:责任编辑 发表时间:2014-03-23 22:25 点击:次
概述
p>
p> 前面已经分析了RM的状态机,接下来将分析NM的状态机,NM状态机包括Container,Application,LocalizedResource三个,其中Container相对较复杂。现在我们分析Container的状态机。另外3展示了LocalizedResource的状态机图,由于其状态机比较简单,这里不再详细分析,读者可以自行查看相关代码。本文的分析基于社区Apache Hadoop最新的2.3.0版本。
p>
p> NodeManager维护着本节点执行的任务(container),从图1中可以看出其维护了containerID,user,resource等信息。Container的实现类为ContainerImpl。图2展示了container的状态机。
p>
p>
p>
p>图1 container接口
p>
p>
p>
p>图2 Container状态机图
p>
p>
p>
p>图3 LocalizedResource状态机图
p>
p>Container状态转换与解释
p>
p>NEW,
p>
p> 在NM中,ContainerManagerImpl实现了ContainerManagementProtocol协议,因此RM和AM可以通过RPC调用startContainers方法命令NM启动相应的Container。在NM的startContainers方法中,会创建一个ContainerImpl对象,且其状态被初始化为NEW。
p>
p>
p>
p>LOCALIZING,
p>
p> 有两个地方会使ContainerImpl的状态转换为LOCALIZING。1.当ApplicationImpl初始化结束时调用AppInitDoneTransition,这时会为Application下的每个container创建ContainerEventType.INIT_CONTAINER事件,ContainerImpl处理此事件并设置自己状态为LOCALIZING(或LOCALIZED,LOCALIZATION_FAILED)。2. 但NM通过RPC调用startContainers方法命令NM启动container时,假如container对应的Application已经处于RUNNING(即初始化已经完成),这时NM会创建ContainerEventType.INIT_CONTAINER事件,ContainerImpl处理此事件并设置自己状态为LOCALIZING(或LOCALIZED,LOCALIZATION_FAILED)。
p>
p> 另外ContainerImpl处理INIT_CONTAINER事件时会调用RequestResourcesTransition,如果有资源需要本地化,则创建INIT_CONTAINER_RESOURCES事件并进入LOCALIZING状态;如果没有资源需要本地化,则创建LAUNCH_CONTAINER事件并进入LOCALIZED状态;如果遇到不合法的资源请求,则进入LOCALIZATION_FAILED状态。
p>
p>
p>
p>LOCALIZED,
p>
p> 当需要本地化的资源都已经完成本地化后,ContainerImpl会调用LocalizedTransition,创建LAUNCH_CONTAINER事件并进入LOCALIZED状态。
p>
p>
p>
p>LOCALIZATION_FAILED,
p>
p> 在本地化资源期间出现异常,则ContainerImpl调用ResourceFailedTransition处理RESOURCE_FAILED事件,清理资源后进入RESOURCE_FAILED状态。
p>
p>
p>
p>RUNNING,
p>
p> 当ContainerImpl进入LOCALIZED前,都会创建LAUNCH_CONTAINER事件,此事件由ContainersLauncher负责处理,它会生成container的启动命令,设置环境变量等,然后创建CONTAINER_LAUNCHED事件并启动container进程。ContainerImpl会调用LaunchTransition处理此事件,并进入RUNNING状态。
p>
p>
p>
p>EXITED_WITH_FAILURE,
p>
p> 在ContainersLauncher启动container期间出异常或container结束时返回值不为0,这时候ContainersLauncher会创建CONTAINER_EXITED_WITH_FAILURE事件,ContainerImpl调用ExitedWithFailureTransition处理此事件,进入EXITED_WITH_FAILURE状态。
最新推荐更多>>>
- 发表评论
-
- 最新评论 更多>>