YARN High Availablity
1. RM Failover

ResourceManager HA 由一个Active/Standby 架构实现:在任何时间点,仅有一个RM是Active,其他一个(或多个)RM节点处于Standby 模式,在Active RM发生故障后,Standby RM 取代它并接管Active的工作。触发转换成active的操作可以由管理命令完成,或是自动由内置的failover-controller完成(需要开启automatic-failover的功能)。
2. 手动转换与failover
当自动failover没有开启时,管理员需要手动将RM的状态转为Active。为了完成failover,首先需要将Active-RM 转换为Standby,然后将Standby-RM 转换为Active。这些均可以通过 yarn rmadmin 命令完成。
3. 自动failover
RMs可以配置一个内置的,基于 Zookeeper 的ActiveStandbyElector,用于决定哪个RM应该是Active的。当Active RM 出现故障下线,或者无法响应了,另一个RM会被自动推选为Active,并接管之后的工作。需要注意的是,这里没有必要像 HDFS HA 那样运行一个额外的ZKFC守护进程,因为ActiveStandbyElector 内置于RM,担任failure detector以及leader elector的角色,可以替代ZKFC守护进程
4. 客户端,ApplicationMaster 以及 NodeManager 与RM failover
当集群中有多个RM时,客户端以及节点所使用的 yarn-site.xml配置文件中,需要列出所有的RMs。客户端,AM以及NM会尝试以轮询的方式去连接RMs,直到命中Active RM。如果Active RM 下线了,则它们会重新尝试轮询,直到命中新的Active RM。默认的重试逻辑由org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider.可以通过实现org.apache.hadoop.yarn.client.RMFailoverProxyProvider类并设置参数 yarn.client.failover-proxy-provider 为实现的类名,以覆盖默认的实现。
5. 恢复前一个active-RM 的状态
在ResourceManager Restart的功能开启后,RM可以被提升为active 状态。加载RM的内部状态数据,并尽可能地从前一个active RM 终止的点继续工作(依赖于RM restart的功能)。对于前Active RM 管理的每个提交的application,均会发起一个新的attempt。Applications可以定期做checkpoint,以防止丢失任何工作。存储的RM 应用状态的 state-store 必须均可被Active/Standby RM 访问。对于状态数据持久化,当前有两种实现RMStateStore 的方式:FileSystemRMStateStore 和 ZKRMStateStore。ZKRMStateStore 在任何时刻仅允许一个RM 拥有写权限,所以它时在HA集群中被推荐使用的方式。在使用ZKRMStateStore时,没有必要再单独增加一个fencing机制(此机制防止可能的脑裂状态),因为多个RM可以自行assume the Active role。
在使用ZKRMStateStore时,建议不要在Zookeeper中设置zookeeper.DigestAuthenticationProvider.superDigest 属性,以确保zookeeper admin 没有访问 yarn application/user credential 信息的权限。
6. 部署
下面是YARN HA 有关配置项:
1. yarn.resourcemanager.zk-address
ZK-quorum的地址,用于state-store以及embedded leader-election
2. yarn.resourcemanager.ha.enabled
Enable HA
3. yarn.resourcemanager.rm-ids
列出RMs的逻辑 id,如:
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2,rm3</value>
</property>
4. yarn.resourcemanager.hostname.rm-id
对每个 rm-id,设置它对应的RM hostname,如:
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>xx.xx.xx.xx</value>
</property>
5. yarn.resourcemanager.address.rm-id
对每个rm-id,指定host:port地址,用于客户端提交job。在指定后,会覆盖 yarn.resourcemanager.hostname.rm-id 里的内容,例如:
<property>
<name>yarn.resourcemanager.address.rm1</name>
<value>ip-xx.xx.xx.xx:8032</value>
</property>
6. yarn.resourcemanager.ha.automatic-failover.enabled
开启自动failover功能,仅当HA功能开启后才开启此功能
7. yarn.resourcemanager.ha.automatic-failover.embedded
使用内置的 leader-elector 选择Active RM,仅当 HA 功能开启后才开启此功能
8. yarn.resourcemanager.cluster-id
集群标识符,elector 使用此属性以确保某个RM不会接管另一集群的工作,例如:
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>ha-rm-uri</value>
</property>
7. 管理命令
yarn rmadmin 提供了部分 HA 相关的命令,用于检查RM 的健康状态,并转换某个RM的状态到Active/Standby。命令接受的 RM id为配置文件中 yarn.resourcemanager.ha.rm-ids 中指定的id。
常规命令如:
> yarn rmadmin -getServiceState rm1
standby
> yarn rmadmin -getServiceState rm3
active
> yarn rmadmin -getAllServiceState
ip-x.x.x.x:8033 standby
ip-y.y.y.y:8033 standby
ip-z.z.z.z:8033 active
如果开启了自动failover的功能,则无法手动做transition。不过仍可以通过加上 -forcemanual 的标识进行强制手动failover(不建议):
> yarn rmadmin -transitionToActive rm1
Automatic failover is enabled for org.apache.hadoop.yarn.client.RMHAServiceTarget@1ea9f6af
Refusing to manually manage HA state, since it may cause
a split-brain scenario or other incorrect state.
If you are very sure you know what you are doing, please
specify the --forcemanual flag.
也可以在zookeeper 里查看对应 active 的 RM
> get /yarn-leader-election/ha-rm-uri/ActiveBreadCrumb
ha-rm-uri
rm1
> get /yarn-leader-election/ha-rm-uri/ActiveStandbyElectorLock
ha-rm-uri
rm1
8. Web Service and UI
在 standby RM 也是正常运行的情况下,在访问standby RM 的 web UI 地址时,会自动转发请求到Active 的 RM,除了“About”页面
对于发往standby RM 的 Yarn Web Service (如 yarn REST APIs)的请求,standby RM 也会自动重定向到Active 的 RM
References:
https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html
YARN High Availablity的更多相关文章
- 大数据之Yarn——Capacity调度器概念以及配置
试想一下,你现在所在的公司有一个hadoop的集群.但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求.那么他们肯定会遇到同时提交任务的场景,这个时候到底如何分配资源满足这 ...
- [大数据之Yarn]——资源调度浅学
在hadoop生态越来越完善的背景下,集群多用户租用的场景变得越来越普遍,多用户任务下的资源调度就显得十分关键了.比如,一个公司拥有一个几十个节点的hadoop集群,a项目组要进行一个计算任务,b项目 ...
- Node.js包管理器Yarn的入门介绍与安装
FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱 ...
- 03 Yarn 原理介绍
Yarn 原理介绍 大纲: Hadoop 架构介绍 YARN 产生的背景 YARN 基础架构及原理 Hadoop的1.X架构的介绍 在1.x中的NameNodes只可能有一个,虽然可以通过Se ...
- Spark on YARN的部署
Spark on YARN的原理就是依靠yarn来调度Spark,比默认的Spark运行模式性能要好的多,前提是首先部署好hadoop HDFS并且运行在yarn上,然后就可以开始部署spark on ...
- yarn关于app max attempt深度解析,针对长服务appmaster平滑重启
在YARN上开发长服务,需要注意fault-tolerance,本篇文章对appmaster的平滑重启的一个参数做了解析,如何设置可以有助于达到appmaster平滑重启. 在yarn-site.xm ...
- Spark源码编译并在YARN上运行WordCount实例
在学习一门新语言时,想必我们都是"Hello World"程序开始,类似地,分布式计算框架的一个典型实例就是WordCount程序,接触过Hadoop的人肯定都知道用MapRedu ...
- 配置Spark on YARN集群内存
参考原文:http://blog.javachen.com/2015/06/09/memory-in-spark-on-yarn.html?utm_source=tuicool 运行文件有几个G大,默 ...
- 【hadoop2.2(yarn)】基于yarn成功执行分布式map-reduce,记录问题解决过程。
hadoop2.x改进了hadoop1.x的架构, 具体yarn如何工作以及改进了什么可以在网上学, 这里仅记录我个人搭建的问题和理解,希望能帮助遇到困难的朋友. 在开始前,必须了解yarn版本的ma ...
随机推荐
- linux基础之IO模型
一.IO模型 一次read操作: (1)等待数据准备好:从磁盘到内核内存 (2)从内核内存复制到进程内存 示意图如下: I/O类型: 同步和异步:synchronous,asynchronous 关注 ...
- gcc,g++,make,cmake的区别
首先介绍一下GCC:GNU Compiler Collection(GNU 编译器集合),在为Linux开发应用程序时,绝大多数情况下使用的都是C语言,因此几乎每一位Linux程序员面临的首要问题都是 ...
- python笔记06
python笔记06 数据类型 上个笔记内容补充 补充 列表 reverse,反转. v1 = [1,2,3111,32,13] print(v1) v1.reverse() print(v1) v1 ...
- FZU-Problem 2150 Fire Game(两点bfs)
Fat brother and Maze are playing a kind of special (hentai) game on an N*M board (N rows, M columns) ...
- 用windows 画图 裁剪照片
图片大小432*312 1.裁剪大小:打开画图--找到矩形选择 形状裁剪完之后,像素会有相应的变化 2.单纯调整像素: 打开画图----重新调整大小(去掉保持纵横比之后可以任意调整大小) 题目:上传 ...
- Pi和e的积分
Evaluate integral $$\int_{0}^{1}{x^{-x}(1-x)^{x-1}\sin{\pi x}dx}$$ Well,I think we have $$\int_{0}^{ ...
- POJ1273【网络流】
Drainage Ditches Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 91824 Accepted ...
- Codeforces Round #617 (Div. 3) 题解
又是隔了一年才来补题的我 A.B水题就不用说了 C - Yet Another Walking Robot C题我居然卡了一会,最后决定用map水,结果出来看了看题解,居然真的是map...没想到会出 ...
- USACO06DEC 牛奶模式
题意:求最长的可重叠的 K重复子串 的长度 考虑二分长度s,转化为验证性问题. 对SA进行分组.保证组内Height最小为s.这样在组内RMQ就可以任意了,因为RMQ一定是大于S的. 只要组内元素个数 ...
- Spring的代理模式(静态,JDK,CGLIB)
一.静态代理 1.定义业务接口 public interface Subject { void doSomeThing(); } 2.真实业务类实现接口 public class RealSu ...