【Hadoop学习】Apache Hadoop ResourceManager HA

简介


本向导简述了YARN资源管理器的HA,并详述了如何配置并使用该特性。RM负责追踪集群中的资源,并调度应用程序(如MapReduce作业)。Hadoop2.4以前,RM是YARN集群中的单点故障。HA特性以Active/Standby RM对的形式对集群添加了冗余,从而消除了这种单点故障。

架构


Overview of ResourceManager High Availability

RM故障恢复

RM HA是通过Active/Standby架构来实现的——任何时刻,有一个RM是活跃的(active),其他RM处于等待模式(Standby),等待当前活跃RM发生故障时可以接管其工作。模式切换的触发源来自管理员(通过CLI)或者通过集成的故障恢复控制器(在自动故障恢复使能时才会启用)。

手动切换A/S模式及故障恢复

当自动故障恢复没有使能时,管理员必须手动把某个RM切换成Active。为了从一个RM恢复到另个上,需要先把活跃的RM切换成Standby模式,再把其他某个Standby-RM切换成Active。所有操作都使用“yarn rmadmin”命令来完成。

自动故障恢复

RM有一个选项可以嵌入ZooKeeper-based ActiveStandbyElector来确定应该激活哪个RM。当活跃的RM宕机或者无响应时,另一个RM就会自动被选出来成为活跃RM并接管集群。注意,对于HDFS HA的情形,无需运行独立的ZKFC进程,因为嵌入在RM中的ActiveStandbyElector会取代独立的ZKFC进程来检查故障并选举leader。

RM故障恢复期间,客户端、AM和NodeManager的行为

存在多个RM时,客户端和节点所用的配置(yarn-site.xml)中列出了所有RM。客户端、AM和NodeManager都会以轮询的方式尝试连接这些RM直至找到活跃的RM为止。如果活跃的RM宕机了,那么它们就会继续轮询所有RM直至找到新的活跃RM为止。这种默认的重试逻辑是以org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider来实现的。你可以覆盖该逻辑,只需实现org.apache.hadoop.yarn.client.RMFailoverProxyProvider并设置属性yarn.client.failover-proxy-provider的值为你所实现的类名。

恢复先前活跃RM的状态

在使能了ResourceManager Restart的情况下, 新的活跃RM加载RM内部状态,并根据RM 重启特性尽可能从先前的活跃RM退出时的位置继续执行。重新尝试抓取之前已提交给RM的每一个受管理的应用程序。应用程序可以周期性地检查以免丢失任何工作。状态存储必须对Active/Standby RM都是可见的。当前,有两种RMStateStore用于持久化——FileSystemRMStateStore和ZKRMStateStore。ZKRMStateStore隐含地允许在任何时刻写访问到单个RM,因此,它是HA集群中推荐使用的存储。使用ZKRMStateStore时,there is no need for a separate fencing mechanism to address a potential split-brain situation where multiple RMs can potentially assume the Active role.

部署


配置

大部分故障恢复功能都可以使用各种配置属性来调整。下面是必要属性和重要属性列表。yarn-default.xml包含了完整的属性列表。详见yarn-default.xml,其中包含各属性的默认值。查看文档ResourceManger Restart 也可以获得有关创建state-store的指令。

配置属性 描述
 yarn.resourcemanager.zk-address  ZK-quorum判决域主机地址。 用于state-store和嵌入式leader-election。
 yarn.resourcemanager.ha.enabled  使能RM HA
 yarn.resourcemanager.ha.rm-ids  RM的逻辑ID列表。如,"rm1,rm2"
 yarn.resourcemanager.hostname.rm-id 为每一个rm-id与其相应的RM主机名。可以轮流设置每一个RM服务地址。
 yarn.resourcemanager.ha.id  用于标识集群中的RM。该参数是可选的;然而,如果设置了该参数,管理员就必须确保所有RM都配置了各自的ID。
 yarn.resourcemanager.ha.automatic-failover.enabled  使能自动故障恢复;默认情况下,只在HA使能时,它才会使能。
 yarn.resourcemanager.ha.automatic-failover.embedded  当自动故障恢复被使能时,使用嵌入式leader-elector选出活跃的RM。默认情况下,只在HA使能时,它才会使能。
 yarn.resourcemanager.cluster-id  标识集群。由elector用于确保当前集群的RM不会接管另一个集群的活跃RM的工作。
 yarn.client.failover-proxy-provider  由客户端、AM和NM用于故障恢复为活跃RM时的类。
 yarn.client.failover-max-attempts  FailoverProxyProvider尝试故障恢复的最大次数。
 yarn.client.failover-sleep-base-ms  用于计算两次故障恢复之间延时的休眠时间基数。单位毫秒。
 yarn.client.failover-sleep-max-ms  两次故障恢复之间的最大休眠时间
 yarn.client.failover-retries  每次尝试连接ResourceManager的重试次数。
 yarn.client.failover-retries-on-socket-timeouts  每次尝试在socket超时时连接ResourceManager的重试次数。

示例配置

以下是创建RM故障恢复最少所需的属性配置。

 <property>
   <name>yarn.resourcemanager.ha.enabled</name>
   <value>true</value>
 </property>
 <property>
   <name>yarn.resourcemanager.cluster-id</name>
   <value>cluster1</value>
 </property>
 <property>
   <name>yarn.resourcemanager.ha.rm-ids</name>
   <value>rm1,rm2</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm1</name>
   <value>master1</value>
 </property>
 <property>
   <name>yarn.resourcemanager.hostname.rm2</name>
   <value>master2</value>
 </property>
 <property>
   <name>yarn.resourcemanager.zk-address</name>
   <value>zk1:2181,zk2:2181,zk3:2181</value>
 </property>

管理命令

“yarn rmadmin ”命令用几个与HA相关的选项来检查RM的健康状态,并切换Active/Standby模式。HA命令采用由yarn.resourcemanager.ha.rm-ids属性所设置的RM服务ID作为参数。

$ yarn rmadmin -getServiceState rm1
 active
 
$ yarn rmadmin -getServiceState rm2
 standby

 如果自动故障恢复被使能了,那么你就可以不用手动切换命令了。

$ yarn rmadmin -transitionToStandby rm1
 Automatic failover is enabled for org.apache.hadoop.yarn.client.RMHAServiceTarget@1d8299fd
 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.

 详见YarnCommands

ResourceManager Web UI服务

假设一个Standby RM上线并运行,那么该Standby RM会自动重定向所有的web请求到活跃的RM,除了RM各自的“About”页面。

Web 服务

假设一个Standby RM上线并运行,那么以ResourceManager REST APIs描述的RM web服务在Standby RM上唤醒时,会被重定向到活跃的RM。

原文地址:https://www.cnblogs.com/zhangningbo/p/4150681.html