CH6 ResourceManager高可用

概述

YARN的资源管理器支持高可用

体系结构

0084da019cb90d1453d8f8e7079e5aa9.png

RM故障转移

RM HA是主从结构,任何时候只有一个主,多个从。转移通过admin客户端或者集成的故障转移控制器自动故障转移。
手动事务和故障转移
没有配置自动故障转移的情况下,管理员可以手动的进行故障转移,使用yarn rmadmin
自动故障转移
RM可以通过参数继承zookeeper的主从选举器来决定性的主。当主下线或者无法响应,另外一个RM就会自动被选举成为新的主。这里不需要单独的运行ZKFC(比如HDFS),因为选举器已经被嵌入在了RM中。
客户端,AM,NM的RM故障转移
当有多个RM,客户端和node被列在所有的RM中。客户端,AM,NM以轮训的方式尝试连接到一个活动的RM。如果活动的RM下线,它们会恢复轮训机制直到一个新的活动RM出现。轮训机制通过
yarn.client.failover-proxy-provider配置。

恢复之前的活动RM状态

如果配置了ResourceManager重启,RM可以加载RM内部状态并且恢复之前的执行推进到活动状态。为每个之前提交到RM的管理应用创建一个重试。应用可以定期的checkpoint避免丢失工作。状态存储必须对主从RM都可见。目前有2种RMStateStore:
1.永久的FileSystemRMStateStore
2.ZKRMStateStore.
ZKRMStateStore同时只能由一个用户写入。当使用ZKRMStateStore时不需要在为脑裂问题才用其他的保护机制。当使用ZKRMStateStore,最好关闭zookeeper.DigestAuthenticationProvider.superDigest,防止zookeeper管理员读取到YARN应用或者用户的凭据信息。

部署
配置
属性
hadoop.zk.address ZK地址
yarn.resourcemanager.ha.enabled 是否启动RMHA
yarn.resourcemanager.ha.rm-ids RM列表啊如rm1,rm2
yarn.resourcemanager.hostname.rm-id rm-id的主机名
yarn.resourcemanager.address.rm-id rm-id的地址
yarn.resourcemanager.scheduler.address.rm-id rm-id的调度器地址
yarn.resourcemanager.resource-tracker.address.rm-id NodeManager的地址
yarn.resourcemanager.admin.address.rm-id 管理性命令的地址
yarn.resourcemanager.webapp.address.rm-id RM web应用的地址
yarn.resourcemanager.webapp.https.address.rm-id RM https用的地址
yarn.resourcemanager.ha.id ha编号
yarn.resourcemanager.ha.automatic-failover.enabled 是否启动自动故障转移
yarn.resourcemanager.ha.automatic-failover.embedded ZK选举器
yarn.resourcemanager.cluster-id 集群id
yarn.client.failover-proxy-provider 轮训策略的类名
yarn.client.failover-max-attempts FailoverProxyProvider最大轮训次数
yarn.client.failover-sleep-base-ms 故障转移间基本sleep时间
yarn.client.failover-sleep-max-ms 故障转移间最大的sleep时间
yarn.client.failover-retries 尝试连接到RM的次数
yarn.client.failover-retries-on-socket-timeouts 尝试连接到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.webapp.address.rm1</name>
  <value>master1:8088</value>
</property>
<property>
  <name>yarn.resourcemanager.webapp.address.rm2</name>
  <value>master2:8088</value>
</property>
<property>
  <name>hadoop.zk.address</name>
  <value>zk1:2181,zk2:2181,zk3:2181</value>
</property>
管理命令

使用yarn rmadmin查看状态,比如

$ 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.
ResourceManager Web UI服务

如果有从rm运行,standby会把所有的web请求重定向到活动的rm

Web 服务

如果有从rm运行,ResourceManager REST APIs调用会被重定向打气活动的RM

Load Balancer

如果有个RM集群运行在Load Balancer上,可以通过/isactive到http端查看健康情况如,
 http://RM_HOSTNAME/isActive如果为200表示RM是active的,否则405.

原文地址:https://www.cnblogs.com/Amaranthus/p/14943668.html