[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优解. 表示刚开始有点懵,看题解也看不太懂. 又中途去补看了一下背包九讲 然后感觉有些理解, ...
随机推荐
- ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo
原文:ASP.NET MVC+EF框架+EasyUI实现权限管理系列(2)-数据库访问层的设计Demo ASP.NET MVC+EF框架+EasyUI实现权限管系列 (开篇) (1)框架搭建 前言:这 ...
- .Net 4.5中的HttpClient试用
.Net 4.5中增加了一个新的System.Net.Http.HttpClient名字空间(在 System.Net.Http.dll 中),用于发送 HTTP 请求和接收 HTTP 响应. 基本操 ...
- 深入了解setInterval方法
相信大家对setInterval方法肯定非常熟悉,但不少人对其缺乏深入的了解,致使当一个flash里有多个setInterval的时候就容易混淆,该清除的间隔lID没有清除,不该清除的时候却清除了.对 ...
- Windows Phone 8.1 应用生命周期
原文:Windows Phone 8.1 应用生命周期 一.“后退键”不会终止应用 关于 Windows Phone 8.1 的应用生命周期,第一个要知道的关键就是:“后退键”不会终止应用! 在 8. ...
- Android[安德鲁斯] 文本Air Video 远程播放电脑视频
苹果iOS下列.目前应用Air Video,能力iOS由Wifi远程直接播放电脑视频,无需看视频复制到手机.非常好用!最近使用Android打电话.展望类别似应用,找了很长一段时间没有找到.在仔细的思 ...
- 顶级jQuery树插件
顶级jQuery树插件 顶级jQuery树插件 2013-03-05 17:20 139人阅读 评论(0) 收藏 举报 jsTree JsTree是一个基于jQuery的Tree控件.支持HTML.J ...
- Yii2中如何使用CodeCeption
Yii2和CodeCeption CodeCeption是一个全栈的PHP测试框架,关于CodeCeption的介绍见:CodeCeption官方文档. Yii2官方增加了对CodeCeption的支 ...
- intellij idea 13&14 插件推荐及快速上手建议 (已更新!)
原文:intellij idea 13&14 插件推荐及快速上手建议 (已更新!) 早些年 在外企的时候,公司用的是intellij idea ,当时也是从eclipse.MyEclipse转 ...
- Gulp前端构建工具
Gulp, 比Grunt更好用的前端构建工具 Gulp, 比Grunt更好用的前端构建工具 本文主要从两个方面介绍Gulp:一,Gulp相对于Grunt的优势: 二,Gulp的安装和使用流程 Gulp ...
- 在VirtualBox下安装CentOS教程(截图版)
http://blog.csdn.net/kobe_lzq/article/details/7894718 使用的软件: VirtualBox 4.1.2 CentOS 5.6 x86_64 刻录的 ...