概述

前面已经分析了RM的状态机,接下来将分析NM的状态机,NM状态机包括Container,Application,LocalizedResource三个。首先我们分析Application的状态机。

NodeManager维护着本节点执行的Application,从图1中可以看出其维护了user,containers,AppId和状态信息。Application的实现类为ApplicationImpl。图2展示了Application的状态机。

图1 Application接口

图2 Application状态机图

Application状态转换与解释

NEW,

在NM中,ContainerManagerImpl实现了ContainerManagementProtocol协议,因此RM和AM可以通过RPC调用startContainers方法命令NM启动相应的Container。在NM的startContainers方法中,会创建ApplicationImpl对象,初始状态为NEW。

INITING,

在NM的startContainers方法中,生成ApplicationImpl对象后,会创建ApplicationEventType.INIT_APPLICATION事件,ApplicationImpl调用AppInitTransition处理此事件,然后设置状态为INITING。

RUNNING,

需要经过两部初始化才能到RUNNING状态。分别为初始化HDFS和本地目录。

在AppInitTransition中,会创建LogHandlerEventType.APPLICATION_STARTED事件,LogHandler会处理此事件,实际上,做为LogHandler的实现类,LogAggregationService初始化App的主要工作是创建目录(一般是HDFS上,通过remoteFS.getWorkingDirectory()方法或得相应目录)和初始化AppAggregator(负责收集container的日志并存储到HDFS上),结束初始化工作后创建ApplicationEventType.APPLICATION_LOG_HANDLING_INITED事件。ApplicationImpl调用AppLogInitDoneTransition处理此事件,期间创建LocalizationEventType.INIT_APPLICATION_RESOURCES事件,然后设置ApplicationImpl为INITING。

ResourceLocalizationService负责处理LocalizationEventType.INIT_APPLICATION_RESOURCES事件,即初始化本地目录,然后创建ApplicationEventType.APPLICATION_INITED事件,ApplicationImpl调用AppInitDoneTransition处理此事件,这时候为App下的每个container创建ContainerEventType.INIT_CONTAINER事件,最后设置ApplicationImpl为RUNNING。

FINISHING_CONTAINERS_WAIT,

如果RM返回给NM心跳信息显示该App属于appsToCleanup列表,或者NM自己停止服务,这时候会创建ApplicationEventType.FINISH_APPLICATION事件,ApplicationImpl调用AppFinishTriggeredTransition处理此事件,如果该App没有container,则ApplicationImpl状态被置为ApplicationState.APPLICATION_RESOURCES_CLEANINGUP;负责为每个container创建ContainerEventType.KILL_CONTAINER事件,然后设置ApplicationImpl的状态为ApplicationState.FINISHING_CONTAINERS_WAIT。

这里解释一下,为什么结束的触发是NM结束服务和RM通知NM,NM结束服务然后通知App很容易理解,但是正常情况下为什么是RM通知NM结束相应的App,这时因为如果ApplicationMaster结束后,RM知道此信息,然后通知NM应该通知这个App对应的container。

APPLICATION_RESOURCES_CLEANINGUP,

当container结束的时候,会创建APPLICATION_CONTAINER_FINISHED事件,ApplicationImpl会调用AppFinishTransition处理此事件,如果此时App下没有container,那么设置ApplicationImpl状态为APPLICATION_RESOURCES_CLEANINGUP,负责设置为FINISHING_CONTAINERS_WAIT。

FINISHED

在设置ApplicationImpl状态为APPLICATION_RESOURCES_CLEANINGUP前,ApplicationImpl会创建LocalizationEventType.DESTROY_APPLICATION_RESOURCES和AuxServicesEventType.APPLICATION_STOP事件,ResourceLocalizationService负责负责DESTROY_APPLICATION_RESOURCES事件,它使用异步方式删除本地App的临时文件,如appcache,nmPrivate等相应的目录。然后生成ApplicationEventType.APPLICATION_RESOURCES_CLEANEDUP事件,ApplicationImpl调用AppCompletelyDoneTransition处理此事件,期间生成LogHandlerEventType.APPLICATION_FINISHED事件,然后设置ApplicationImpl状态为FINISHED。

转载请注明出处:http://www.cnblogs.com/shenh062326/p/3591129.html

[NM 状态机1] Application状态机详解的更多相关文章

  1. SpringBoot配置文件 application.properties详解

    SpringBoot配置文件 application.properties详解   本文转载:https://www.cnblogs.com/louby/p/8565027.html 阅读过程中若发现 ...

  2. [转]application.properties详解 --springBoot配置文件

    本文转载:http://blog.csdn.net/lpfsuperman/article/details/78287265###; # spring boot application.propert ...

  3. application.properties详解 --springBoot配置文件【转载】

    # spring boot application.properties配置的各个属性详解 # 该示例文件作为标准提供.(官方文档 翻译过来的) # 还是花了些功夫翻译,各位如果转发,请留下本文地址, ...

  4. application.properties详解 --springBoot配置文件

    本文转载:http://blog.csdn.net/lpfsuperman/article/details/78287265###; # spring boot application.propert ...

  5. springboot集成freemarker 配置application.properties详解

    #配置freemarker详解 #spring.freemarker.allow-request-override=false # Set whether HttpServletRequest att ...

  6. Spring Boot属性配置文件:application.properties 详解

    学习资料 网址 官方说明文档 https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-pro ...

  7. HTML5应用程序缓存Application Cache详解

    什么是Application Cache HTML5引入了应用程序缓存技术,意味着web应用可进行缓存,并在没有网络的情况下使用,通过创建cache manifest文件,可以轻松的创建离线应用. A ...

  8. Delphi Application.MessageBox详解

    引数:1. Text:要显示的讯息2. Caption:讯息视窗的标题列文字3. Flags:讯息旗标     3.1. 可指定讯息视窗上的图示     3.2. 可指定讯息视窗出现的按钮     3 ...

  9. application:didFinishLaunchingWithOptions:详解

    iOS 程序启动时总会调用application:didFinishLaunchingWithOptions:,其中第二个参数launchOptions为NSDictionary类型的对象,里面存储有 ...

随机推荐

  1. Jquery JS 正确的比较两个数字大小的方法

    if(2 > 10){ alert("不正确!");} 此比较不会是想要的结果:它相当于2 >1,把10的第一位取出来比较. 解决方 法:  if(eval(2) &g ...

  2. golang错误处理机制:panic与recover

    原文地址:http://www.niu12.com/article/14 panic知识点 package main import ( "fmt" "github.com ...

  3. sql server触发器复制记录

    Create Trigger test_tri5 on test after insert as begin declare @id sysname, @tel sysname, @name sysn ...

  4. 在Spring3中使用注解(@Scheduled)创建计划任务

    Spring3中加强了注解的使用,其中计划任务也得到了增强,现在创建一个计划任务只需要两步就完成了: 创建一个Java类,添加一个无参无返回值的方法,在方法上用@Scheduled注解修饰一下: 在S ...

  5. os.waitpid()无法获取sys.exit()退出时的status code

    [目的] 父进程使用os.waitpid()等待子进程退出,并检测子进程的exit code,以决定是否重启子进程. (常见的应用场景是:子进程接收外部命令,收到"stop"时退出 ...

  6. 求x>0时,y=x^3-6x^2+15的极值

    解: 当x→∞时,y也→∞,所以y没有最大值. y=x3-6x2+15=-4*(x/2)*(x/2)*(6-x)+15 而根据几何平均数小于等于算术平均数的定理,(x/2)*(x/2)*(6-x)在x ...

  7. ssh远程连接

    SSH 是Secure Shell protocol 的简写,经由将联机的封包加密的技术,来进行资料的传递,安全. telnet: tcp:23 基于字符 任意客户端登录远程服务器 明文 无需验证 易 ...

  8. 十大迷你iPhone天气应用

    来源:GBin1.com 天气特别是指大气情况这样的状态通常包括温度,风,云,湿度和降雨等.上述情况下的天气状况很大程度影响了我们的生活和每天的日常活动.天气可能会经常出乎意料,所以往往希望能够准确提 ...

  9. UVA270-Lining Up

    斜率斜率斜率......... #include<iostream> #include<cstdio> #include<algorithm> #include&l ...

  10. Mybatis错误:Result Maps collection already contains value for 。。。。

    解决方法 原因:xml文件中存在重名对象,保持名称不要一样即可正常启动.因为我再次使用逆向工程生成mapper接口和xml文件时,忘了删除原来的xml文件,新生成的与旧的同时出现旧重复了. 那么我们在 ...