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的更多相关文章

  1. 大数据之Yarn——Capacity调度器概念以及配置

    试想一下,你现在所在的公司有一个hadoop的集群.但是A项目组经常做一些定时的BI报表,B项目组则经常使用一些软件做一些临时需求.那么他们肯定会遇到同时提交任务的场景,这个时候到底如何分配资源满足这 ...

  2. [大数据之Yarn]——资源调度浅学

    在hadoop生态越来越完善的背景下,集群多用户租用的场景变得越来越普遍,多用户任务下的资源调度就显得十分关键了.比如,一个公司拥有一个几十个节点的hadoop集群,a项目组要进行一个计算任务,b项目 ...

  3. Node.js包管理器Yarn的入门介绍与安装

    FAST, RELIABLE, AND SECURE DEPENDENCY MANAGEMENT. 就在昨天, Facebook 发布了新的 node.js 包管理器 Yarn 用以替代 npm .咱 ...

  4. 03 Yarn 原理介绍

    Yarn 原理介绍 大纲: Hadoop 架构介绍 YARN 产生的背景 YARN 基础架构及原理   Hadoop的1.X架构的介绍   在1.x中的NameNodes只可能有一个,虽然可以通过Se ...

  5. Spark on YARN的部署

    Spark on YARN的原理就是依靠yarn来调度Spark,比默认的Spark运行模式性能要好的多,前提是首先部署好hadoop HDFS并且运行在yarn上,然后就可以开始部署spark on ...

  6. yarn关于app max attempt深度解析,针对长服务appmaster平滑重启

    在YARN上开发长服务,需要注意fault-tolerance,本篇文章对appmaster的平滑重启的一个参数做了解析,如何设置可以有助于达到appmaster平滑重启. 在yarn-site.xm ...

  7. Spark源码编译并在YARN上运行WordCount实例

    在学习一门新语言时,想必我们都是"Hello World"程序开始,类似地,分布式计算框架的一个典型实例就是WordCount程序,接触过Hadoop的人肯定都知道用MapRedu ...

  8. 配置Spark on YARN集群内存

    参考原文:http://blog.javachen.com/2015/06/09/memory-in-spark-on-yarn.html?utm_source=tuicool 运行文件有几个G大,默 ...

  9. 【hadoop2.2(yarn)】基于yarn成功执行分布式map-reduce,记录问题解决过程。

    hadoop2.x改进了hadoop1.x的架构, 具体yarn如何工作以及改进了什么可以在网上学, 这里仅记录我个人搭建的问题和理解,希望能帮助遇到困难的朋友. 在开始前,必须了解yarn版本的ma ...

随机推荐

  1. HDFS的扩容

    一.扩容 1.1横向扩容:加节点    https://www.cnblogs.com/the-roc/p/12362926.html 1.2纵向扩容:加硬盘 二.纵向扩容 2.1添加硬盘 2.2在关 ...

  2. multiprocessing 方法解析:

    以上是关于进程池的使用,截下来开始介绍如何使用多进程,由于multiprocessing 实现比concurrent.futures 实现更加底层这里还是推荐大家使用concurrent.future ...

  3. (三)运用Python模块和包

    1 引言 为了能够在Python项目中高效地运用Python模块和包,我们需要进一步地来了解它们是如何在Python项目中进行定义.使用和工作的. 2 Python模块和包 Python模块和包的基本 ...

  4. vue keep-alive 遇见 vue-router

    keep-alive 遇见 vue-router ·keep-alive 是Vue内置的一个组件,可以使被包含的组件保留状态,或避免重新渲染 ·routre-view也是一个组件,如果直接被包在kee ...

  5. Python3标准库:enum枚举

    1. enum枚举 枚举是一组符号名称(枚举成员)的集合,枚举成员应该是唯一的.不可变的.在枚举中,可以对成员进行恒等比较,并且枚举本身是可迭代的. 1.1 创建枚举 可以使用class语法派生Enu ...

  6. js 弹窗插件

    toastr 参考 https://www.cnblogs.com/fu-yong/p/8609597.html prettyPhoto使用 参考

  7. window.location.herf传值问题

    各个值之间用&&&&&&连接 新版本的tomcat不支持其他字符,需要通过encodeURIComponent编码 变量名数字后不能直接加字母 such ...

  8. 安装多个jdk环境7、8、11等,并且切换默认使用版本

    背景 在公司开发时,不同项目往往使用不同的jdk.目前使用最多的应该是JDK1.8,但是有些老项目使用1.7甚至1.6等 或者你想学习JDK最新版本,一些新特新如JDK11,现在最新都有JDK13 1 ...

  9. django实现简易登录注册

    经过一些文档的理解,以及一些时间的琢磨.我觉得可以用django做一些小项目了 先说说登录功能吧. 先创建一个app,用admin命令 在cmd打开到manage.py同级目录下,django-adm ...

  10. Jmeter-简介及安装

    一.Jmeter简介 Apache Jmeter 是Apache组织的开放源代码项目,是一个纯java桌面应用,用于压力测试和性能测量.它最初被设计用于Web应用测试但后来扩展到其它测试领域. Apa ...