概述
YARN的资源管理器支持高可用
体系结构
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.