[RM 状态机详解4] RMNode状态机详解
摘要
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状态机详解的更多相关文章
- [RM 状态机详解1] RMApp状态机详解
概述 Apache Hadoop 2.0在Hadoop 1.0基础上做了许多的重构工作,代码上的重构最大的变化在于引入状态机处理各个角色的状态与变迁,使用状态机是得代码结构更加清晰,方便异步处理各种操 ...
- ViewPager 详解(二)---详解四大函数
前言:上篇中我们讲解了如何快速实现了一个滑动页面,但问题在于,PageAdapter必须要重写的四个函数,它们都各有什么意义,在上节的函数内部为什么要这么实现,下面我们就结合Android的API说明 ...
- IE8“开发人员工具”使用详解上(各级菜单详解)
来源: http://www.cnblogs.com/JustinYoung/archive/2009/03/24/kaifarenyuangongju.html IE8“开发人员工具”使用详解上(各 ...
- iOS 开发之照片框架详解之二 —— PhotoKit 详解(下)
本文链接:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-three.html 这里接着前文<iOS ...
- iOS 开发之照片框架详解之二 —— PhotoKit 详解(上)
转载自:http://kayosite.com/ios-development-and-detail-of-photo-framework-part-two.html 一. 概况 本文接着 iOS 开 ...
- linux驱动由浅入深系列:高通sensor架构实例分析之三(adsp上报数据详解、校准流程详解)【转】
本文转载自:https://blog.csdn.net/radianceblau/article/details/76180915 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...
- Linux的压缩解压命令快速上手——解压篇
在Linux系统中,压缩文件通常是先将若干文件(包括目录)打包成一个tar文件,然后再调用压缩程序将tar文件压缩成相应的压缩包,这也就是为什么Linux系的压缩包的后缀通常都是像tar.gz,tar ...
- [RM 状态机详解3]RMContainer状态机详解
摘要 RMContainer是RM内部维护的Container状态.事实上,在RM的调度器中,会维护着一个liveContainers列表,保存着所有存活着的Container信息.图1显示RMCon ...
- 背包【p1858】 多人背包(次优解 or 第k优解)
题目描述--->p1858 多人背包 分析: 很明显,这题是背包问题的一种变形. 求解 次优解or第k优解. 表示刚开始有点懵,看题解也看不太懂. 又中途去补看了一下背包九讲 然后感觉有些理解, ...
随机推荐
- 随手记UIKit Dynamics
以今年的优势WWDC品行,我记得一些明年的元素.一些博客上找到了新的功能没有被记录.认为iOS 8全力以赴.iOS 7该属性不随手记录为时已晚 :) 参考WWDC 2013的Session Video ...
- UVa 740 - Baudot Data Communication Code
称号:目前编码,他们shift键被按下,并提出,对应的两个编码,其中,2相应的编码shift操作. 给你适当的编码值.寻求相应的字符串. 分析:模拟.字符串. 简单题,标记shift的升降分类处理就可 ...
- VS2012使用XListCtrl
XListCtrl.强大ListCtrl.到现在,所有我曾经遇到过ListCtrl我们使用XListCtrl攻克. XListCtrl有什么可以支持? 变化column背景颜色.尺寸.线.制作chec ...
- jquery 调用wcf 的SOA架构,将三层架构运用到SOA的架构中来(第四天)
经过前面3天的学习,我想大家应该对SOA的架构有了初步的了解,其实 SOA与三层架构并不冲突,而是三层架构的升级版. 来看下传统的三层架构! 一共可以分为4个层: 模型层(可有可无),客户端,服务端, ...
- 【百度地图API】发布静态图API啦!只需一个网址,即可展示定制百度地图!
原文:[百度地图API]发布静态图API啦!只需一个网址,即可展示定制百度地图! 摘要: 百度地图静态图API!您无须执行任何“特殊”操作便可在网页上显示此图片. 不需要 JavaScript.我们只 ...
- crm创建和编辑全局选项集
一个选项集就是可包含在一个实体中的某种类型的字段.它定义一组选项.当一个选项集显示在窗口中时,将使用下拉列表控件.当在 Advanced Find 中显示时,则使用选择列表控件.有时,开发者将选项集称 ...
- Ubuntu下的用户和权限(二)
五.chown.chgrp命令 从名字就能够猜測他们是干嘛的,可是这两个命令须要root权限. chown命令的格式为:chown user:group file 中间的user : group三项 ...
- 虚拟局域网(VLAN)组态
图1 实验拓扑图 实验内容: (一)分别把交换机命名为SWA,SWB. (二)划分虚拟局域网vlan,并静态地把port划分到valn中. 第一.使用两种方法划分vlan. l 在全局模式下划分vl ...
- CreateMutex
C++ API CreateMutex 找出当前系统是否已经存在指定进程的实例.假设没有则创建一个相互排斥体.CreateMutex()函数可用来创建一个有名或无名的相互排斥量对象. HANDLE C ...
- Lyx输入中文与代码高亮
如果您看了我的这个随笔:<OpenSUSE 13.2安装Texlive2014+Texmaker+Lyx> (一)LyX中文 打开Lyx直接新建开始使用,那么输入的中文会是编译失败的,疑? ...