[关闭]
@changedi 2017-07-07T16:41:33.000000Z 字数 4035 阅读 16650

YARN-RM的高可用(High Availability)

大数据 YARN



原文:http://hadoop.apache.org/docs/r2.6.4/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html

介绍

本文档提供一个YARN的ResourceManager的High Availability的概述以及如何配置的细节。RM负责追踪集群的资源和调度应用作业(比如Mapreduce作业)。在Hadoop 2.4之前,ResourceManager是YARN集群的单点。高可用特性就是用来解决单点问题的,通过加入一个Active/Standby的ResourceManager对来解决。

架构

Overview of ResourceManager High Availability

RM Failover

ResourceManager HA通过一个主从架构实现——在任意时刻,总有一个RM是active的,而一个或更多的RM处于standby状态等待随时成为active。触发active的转换的条件是通过admin命令行或者在automatic-failover启用的情况下通过集成的failover-controller触发。

手动转换和failover

当自动failover没有启用时,管理员需要手动切换众多RM中的一个成为active。为了从一个RM到其他RM进行failover,做法通常是先将现在的Active的RM切为Standby,然后再选择一个Standby切为Active。所有这些都可以通过"yarn rmadmin"的命令行完成。

自动failover

RM有一个选项可以嵌入使用Zookeeper的ActiveStandbyElector来决定哪个RM成为Active。当Active挂掉或者不响应时,另一个RM会自动被选举为Active然后接管集群。注意,并不需要像HDFS一样运行一个隔离的ZKFC守护进程,因为对于嵌入到RM中的ActiveStandbyElector表现出来就是在做failure检查和leader选举,不用单独的ZKFC。

在RM failover时的Client, ApplicationMaster和 NodeManager

当有多个RM时,被client和node使用的配置文件yarn-site.xml需要列出所有的RM。Clients, ApplicationMasters (AMs) 和 NodeManagers (NMs) 会以一种round-robin轮询的方式来不断尝试连接RM直到其命中一个active的RM。如果当前Active挂掉了,他们会恢复round-robin来继续寻找新的Active。默认的重试策略是 org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider类来实现的。你可以通过继承实现org.apache.hadoop.yarn.client.RMFailoverProxyProvider来覆盖这个方法,并且设置对应的类名到这个属性yarn.client.failover-proxy-provider。

从之前的主RM状态恢复

伴随ResourceManager的重启机制开启,升级为主的RM会加载RM内部状态并且恢复原来RM留下的状态,而这依赖于RM的重启特性。而之前提交到RM的作业会发起一个新的尝试请求。应用作业会周期性的checkpoint来避免任务丢失。状态存储对于所有的RM都必须可见。当前,有两种RMStateStore实现来支持持久化—— FileSystemRMStateStore 和 ZKRMStateStore。其中 ZKRMStateStore隐式的允许在任意时刻写到一个单一的RM,因此是HA集群的推荐存储。当使用ZKRMStateStore时,不需要单独的隔离机制来解决分布式的脑裂问题(多个RM都成为Active)。

部署

配置

大多数的failover机制是可以通过多个配置属性来调节的。以下是一些必须或者重要的属性。yarn-default.xml带有全部的属性节点。更多细节和默认值,参看yarn-default.xml。

Configuration Property Description
yarn.resourcemanager.zk-address zk-quorum的地址。同时用于状态存储和leader选举。
yarn.resourcemanager.ha.enabled Enable RM HA
yarn.resourcemanager.ha.rm-ids RM的逻辑id,比如"rm1,rm2"
yarn.resourcemanager.hostname.rm-id 对于每个rm-id,声明一个对应的主机名,也可以声明rm的服务地址来替换。
yarn.resourcemanager.ha.id 在全体中识别RM。可选参数;如果设置了,admin需要确保所有的RM都有属于自己的id。
yarn.resourcemanager.ha.automatic-failover.enabled 启动自动failover;只有在HA启动的情况下默认启动。
yarn.resourcemanager.ha.automatic-failover.embedded 当启用自动failover后,使用内置的leader选举来选主RM。只有当HA启用时默认是开启的。
yarn.resourcemanager.cluster-id 标识集群。被elector用来确保RM不会接管另一个集群,即不会成为其他集群的主RM。
yarn.client.failover-proxy-provider Clients, AMs NMs连接主RM,实现failover的类
yarn.client.failover-max-attempts FailoverProxyProvider尝试failover的最大次数。
yarn.client.failover-sleep-base-ms failover之间计算延迟的睡眠时间(单位是毫秒)
yarn.client.failover-sleep-max-ms failover之间的睡眠最大时间(单位毫秒)
yarn.client.failover-retries 每次连接RM的重试次数。
yarn.client.failover-retries-on-socket-timeouts 每次连接RMsocket超时的重试次数。

配置示例

这是一个RM failover配置的最小配置。

  1. <property>
  2. <name>yarn.resourcemanager.ha.enabled</name>
  3. <value>true</value>
  4. </property>
  5. <property>
  6. <name>yarn.resourcemanager.cluster-id</name>
  7. <value>cluster1</value>
  8. </property>
  9. <property>
  10. <name>yarn.resourcemanager.ha.rm-ids</name>
  11. <value>rm1,rm2</value>
  12. </property>
  13. <property>
  14. <name>yarn.resourcemanager.hostname.rm1</name>
  15. <value>master1</value>
  16. </property>
  17. <property>
  18. <name>yarn.resourcemanager.hostname.rm2</name>
  19. <value>master2</value>
  20. </property>
  21. <property>
  22. <name>yarn.resourcemanager.zk-address</name>
  23. <value>zk1:2181,zk2:2181,zk3:2181</value>
  24. </property>

管理命令

yarn rmadmin有一组HA相关的命令选项来检查RM的健康状态,以及切换主备。HA用来切换的RM的id由 yarn.resourcemanager.ha.rm-ids属性设置。

  1. $ yarn rmadmin -getServiceState rm1
  2. active
  3. $ yarn rmadmin -getServiceState rm2
  4. standby

如果自动failover开启,就不需要手动的切换命令了。

  1. $ yarn rmadmin -transitionToStandby rm1
  2. Automatic failover is enabled for org.apache.hadoop.yarn.client.RMHAServiceTarget@1d8299fd
  3. Refusing to manually manage HA state, since it may cause
  4. a split-brain scenario or other incorrect state.
  5. If you are very sure you know what you are doing, please
  6. specify the forcemanual flag.

更多细节参看YarnCommands。

ResourceManager的web界面服务

假设一个standby的RM启动并服务,Standby会自动重定向所有的web请求到Active,除了About页面。

Web服务

假设一个standby的RM启动并服务,被一个standby RM调用的REST API相关的web服务会自动重定向到Active RM。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注