[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优解. 表示刚开始有点懵,看题解也看不太懂. 又中途去补看了一下背包九讲 然后感觉有些理解, ...
随机推荐
- Android中的“再按一次返回键退出程序”实现[转]
用户退出应用前给出一个提示是很有必要的,因为可能是用户并不真的想退出,而只是一不小心按下了返回键,大部分应用的做法是在应用退出去前给出一个Dialog,我觉得这样不太友好,用户还得移动手指去按dial ...
- (hdu step 6.3.2)Girls and Boys(比赛离开后几个人求不匹配,与邻接矩阵)
称号: Girls and Boys Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others ...
- c++的string容器
c++相比c的一个好处就是实现了很多的容器和泛型算法,使得程序员的工作得到了很大的化简.其中一个很有用的泛型容器就是string.string是一个类,是一个在STL里边实现好了的类,由于他的很多功能 ...
- iOS设备per app vpn,什么是什么系统的要求,必须?
坑爹Apple网站信息MDM厂商资料,最有发言权iOS 7.x设备支持per app vpn该,但它没有说明是什么系统要求环保要求. 1. iOS 7.x 设备.当然 2. iOS 7.x 需要设备M ...
- 前端学习笔记(zepto或jquery)—— 布局技巧(一)
html5中有一些标签我们很难改变其样式,例如input=file,select等.这个时候我们需要改变一下思路,将原有透明度置为0,借助于div或span等以控制样式的标签来代替. 效果图: < ...
- Swift中文教程(二)--简单值
原文:Swift中文教程(二)--简单值 Swift使用let关键字声明常量,var关键字声明变量.常量无需在编译时指定,但至少要被赋值一次.也就是说,赋值一次多次使用: var myVariable ...
- canvas绘制贝塞尔曲线
原文:canvas绘制贝塞尔曲线 1.绘制二次方贝塞尔曲线 quadraticCurveTo(cp1x,cp1y,x,y); 其中参数cp1x和cp1y是控制点的坐标,x和y是终点坐标 数学公式表示如 ...
- Hack 语言学习/参考---1.Hack 语言
Table of Contents What is Hack? Hack Background Summary Hack is a language for HHVM that interopates ...
- Spring 之 第一个hellword
Rod Johnson在2002年编著的<Expert one to one J2EE design and development>一 书中,对Java EE正统框架臃肿.低效.脱离现实 ...
- jquery自己主动旋转的登录界面的背景代码登录页背景图
在其他网站上看到比较爽Web登录界面.背景图片可以自己主动旋转. 介绍给大家.有兴趣的可以改改下来作为自己的系统登录界面. 如图: watermark/2/text/aHR0cDovL2Jsb2cuY ...