概述

前面已经分析了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. Windows下生成 公钥 私钥以及 配置 Filezilla中的 SFTP的私钥

    Win下需要使用到 PuTTYgen.exe来生成公钥私钥,可以参考youtube的这篇文章:  为 SFTP 保管箱生成 Secure Shell (SSH) 密钥对 PuTTYgen.exe的下载 ...

  2. soap-学习

    1. SOAP 是一种简单的基于 XML 的协议,它使应用程序通过 HTTP 来交换信息. 简单的说:SOAP是用于访问网络服务的协议. 2. 什么是SOAP SOAP 指简易对象访问协议 SOAP ...

  3. Hive不等值连接

    select * from ( select t1.instalment_id as r_id , t2.instalment_id as p_id from (select instalment_i ...

  4. minic 动作句型处理

    #include "lex_define.h" enum keywords_type//代表一些关键字 { loop_for=,//代表for关键字 loop_while,//代表 ...

  5. vue -model

    1. v-model:监听表单(input,textarea,selector)value. 2. label不知道你有没有这样的体验,我明明没有点用户名输入框,而仅仅是点了“用户名”三个字,然后就直 ...

  6. Sun公司开源游戏服务器

    http://www.360doc.com/content/11/0307/12/2902158_98866885.shtml http://www.cnblogs.com/daidu/archive ...

  7. mysql创建用户、授权,revoke

     use mysql;set password for root =password('haowumz');select host,user,password from user ;show gran ...

  8. ant Select 联动

    1.代码 /** * 选择监区 组件 */ import React, { PureComponent } from 'react'; import PropTypes from 'prop-type ...

  9. {...formItemLayout} 标签布局

    {...formItemLayout}是reactjs中属性的写法{...props},formItemLayout标签布局,wrapperCol需要为输入控件设置布局样式时,和label 标签布局, ...

  10. TI BSL in python

    今天花了一下午在这个上面,被这个工具整没脾气了快.花点功夫记录一下. 代码是在linux下下过来的: bzr branch lp:python-msp430-tools 看了下,有我想要的器件.然后想 ...