摘要

RMNode状态机是ResourceManager的四个状态机(RMApp,RMAppAttempt,RMContainer,RMNode)中最简单的一个,状态机如图1所示。RMNode是ResourceManager用于保存NM信息的类,包括NM的机器名,地址,端口,状态等信息。

图1 RMNode状态机图

RMNode状态与转换详解

NEW,

每个NM启动的时候都会通过ResourceTracker协议向RM注册,RM便会创建RMNodeImpl对象,这时RMNodeImpl的状态被初始化为NEW。

RUNNING,

在RM处理NM注册期间,新建RMNodeImpl对象后,会创建RMNodeEventType.STARTED事件,RMNodeImpl调用AddNodeTransition处理此事件,这时会创建SchedulerEventType.NODE_ADDED和NodesListManagerEventType.NODE_USABLE事件,然后RMNodeImpl状态改为RUNNING。

UNHEALTHY,

NM每次汇报心跳给RM的时候都需要传递其状态给RM,RM处理NM心跳的时候会创建RMNodeEventType.STATUS_UPDATE事件,RMNodeImpl会调用StatusUpdateWhenHealthyTransition处理此事件,如果NM传递过来的状态是UNHEALTHY,则RMNodeImpl状态被设置为UNHEALTHY,否则设置为RUNNING。

另外如果RMNodeImpl处于UNHEALTHY状态,当收到RMNodeEventType.STATUS_UPDATE事件后,RMNodeImpl调用StatusUpdateWhenUnHealthyTransition处理,并根据NM传递过来的状态设置RMNodeImpl的状态。

DECOMMISSIONED,

当NM发送心跳给RM的时候,RM会检查这个节点是否属于合法节点(如在exclude文件中的节点就属于不合法节点),如果不合法,则创建RMNodeEventType.DECOMMISSION事件,RMNodeImpl调用DeactivateNodeTransition处理此事件,RMNodeImpl被置为DECOMMISSIONED。

LOST,

与RMContainerImpl的LOST状态类似,当Node超过一段时间(默认600000ms)没有发送心跳则RMNodeImpl会被标记为LOST。

REBOOTED,

当RM处理NM心跳时,如果NM传递过来的心跳号码与RM保存的心跳号码不一致(相差大于1),则RM会认定这个NM重启了,这时RM会创建RMNodeEventType.REBOOTING事件,RMNodeImpl会设置自己状态为REBOOTED。

小结

至此,已经把RM的四个状态机分析了一遍,对RM管理Application和Node的流程有了一个清晰的认识。采用状态机的方式维护RM内部状态的好处是,尽量异步操作加快AM和NM的心跳处理;采用状态机编程简单;通过状态机图能对状态的转换一目了然。当然由于大量的异步操作有可能会增加问题调查的难度,也不方便对程序进行单步调试。

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

[RM 状态机详解4] RMNode状态机详解的更多相关文章

  1. [RM 状态机详解1] RMApp状态机详解

    概述 Apache Hadoop 2.0在Hadoop 1.0基础上做了许多的重构工作,代码上的重构最大的变化在于引入状态机处理各个角色的状态与变迁,使用状态机是得代码结构更加清晰,方便异步处理各种操 ...

  2. ViewPager 详解(二)---详解四大函数

    前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...

  3. IE8“开发人员工具”使用详解上(各级菜单详解)

    来源: http://www.cnblogs.com/JustinYoung/archive/2009/03/24/kaifarenyuangongju.html IE8“开发人员工具”使用详解上(各 ...

  4. iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)

    本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...

  5. iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)

    转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...

  6. linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)【转】

    本文转载自:https://blog.csdn.net/radianceblau/article/details/76180915 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...

  7. Linux的压缩解压命令快速上手——解压篇

    在Linux系统中,压缩文件通常是先将若干文件(包括目录)打包成一个tar文件,然后再调用压缩程序将tar文件压缩成相应的压缩包,这也就是为什么Linux系的压缩包的后缀通常都是像tar.gz,tar ...

  8. [RM 状态机详解3]RMContainer状态机详解

    摘要 RMContainer是RM内部维护的Container状态.事实上,在RM的调度器中,会维护着一个liveContainers列表,保存着所有存活着的Container信息.图1显示RMCon ...

  9. 背包【p1858】 多人背包(次优解 or 第k优解)

    题目描述--->p1858 多人背包 分析: 很明显,这题是背包问题的一种变形. 求解 次优解or第k优解. 表示刚开始有点懵,看题解也看不太懂. 又中途去补看了一下背包九讲 然后感觉有些理解, ...

随机推荐

  1. Firefox firebug and xpath checker

    From http://blog.sina.com.cn/s/blog_5aefba9a0100csy8.html

  2. 利用BBED恢复UPDATE改动前的值

    转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/30615151 实验步骤例如以下: 1.创建表guo_test1 gyj@PROD> ...

  3. centos6.5 x86_64安装oracle 11.2.0.3grid

     centos6.5 x86_64安装oracle 11.2.0.3grid 1.安装前的准备 工作 1.1.配置node1 1.1.1.配置虚拟机并安装centos 安装node1----- 1 ...

  4. 两种计算和输出n内5要么9除尽互惠

    #include<stdio.h> int main() { int i=0,n=0; float fSum=0; scanf("%d", &n); for ( ...

  5. Eclipse部署Web项目(图文讲解)

    讲解是在linux下完成的,但对windows系统,操作也是一样的,不要被吓到了 1.下载Eclipse

  6. Utility Classes Are Evil

    原文地址:http://alphawang.com/blog/2014/09/utility-classes-are-evil/ This post is a summary of this arti ...

  7. (转)迎接 Entity Framework 7

    对实体框架的下一版本的开发正在顺利进行中.我在 2014 年度北美 TechEd 上第一次了解 EF 团队的工作内容,当时项目经理 Rowan Miller 讨论了 Entity Framework ...

  8. Pki原则

    核心提示: 公开密钥和公开密钥证明书,产生的私钥client要么server证书.加密的公共密钥才能解密私钥文件只.私钥只能解密公开的加密文件.公众认为,它是开放的.所有的人都能够得到它.私人还表明, ...

  9. PHP调用Webservice实例

    原文 PHP调用Webservice实例 NuSoap是PHP环境下的WebService编程工具,用于创建或调用WebService.它是一个开源软件,是完全采用PHP语言编写的.通过HTTP收发S ...

  10. Asp.net TextBox只能输入数字

    原文:Asp.net TextBox只能输入数字 <asp:textbox id="TextBox1" onkeyup="if(isNaN(value))execC ...