YARN-RM-HA
在2.4之前,YARN存在单点故障,之后添加了高可用。
图片来自互联网,链接:http://hadoop.apache.org/docs/r3.1.1/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html
RM-HA通过主备架构实现高可用。在任何时候只有一个为Active,一个或者多个Standby等待接管Active。可以通过CLI手动切换,也可以通过内置的failover-controller自动故障切换。
RMs内置一个基于Zookeeper的ActiveStandbyElector决定哪个RM应该成为Active。当Active故障后,其他RM自动选举Active接管任务。不需要额外运行一个ZKFC守护进程,因为嵌入在RMs的ActiveStandbyElector扮演了故障检测和领导选举,代替ZKFC守护进程。
客户端、AM、NM在故障切换时:
故障时,这些进程会轮询Active。默认的尝试逻辑通过org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider。你可以自己实现,只需要继承org.apache.hadoop.yarn.client.RMFailoverProxyProvider,然后修改yarn.client.failover-proxy-provider的值。
恢复之前的state
当开启ResourceManager Restart时,RM会被调起到激活状态,加载RM 内部state,从上个Active停止的地方继续操作。对于之前提交的应用,会重新生成一个attempt。目前有两种RMStateStore实现永久存储。FileSystemRMStateStore和ZKRMStateStore。ZKRMStateStore明确允许在任何时候一个RM可以写入数据,并且是推荐的存储方案。
当使用ZKRMStateStore的时候,不需要单独的fencing机制去处理潜在的集群脑裂问题,多个RM会自己设定Active role。
当使用ZKRMStateStore的时候,推荐不设置zookeeper.DiegetAuthenticationProvider.superDigest属性确保zookeeper管理员没有YARN application/user 的认证信息。
部署配置
hadoop.zk.address
yarn.resourcemanager.ha.enabled
yarn.resoucemanager.ha.rm-ids
yarn.resourcemanager.hostname.rm-id
yarn.resourcemanager.address.rm-id
yarn.resourcemanager.scheduler.address.rm-id
yarn.resourcemanager.resouce-tracker.address.rm-id
yarn.resourcemanager.admin.address.rm-id
yarn.resourcemanager.webapp.address.rm-id
yarn.resourcemanager.webapp.https.address.rm-id
yarn.resourcemanager.ha.id
yarn.resourcemanager.ha.automatic-failover.enabled
yarn.resourcemanager.ha.automatic-failover.embedded
yarn.resourcemanager.cluster-id
yarn.client.failover-proxy-provider
yarn.client.failover-max-attempts:FailoverProxyProvider失败尝试次数。
yarn.client.failover-sleep-base-ms:
yarn.client.failover-sleep-max-ms
yarn.client.failover-retries
yarn.client.failover-retries-on-socket-timeouts
简单配置
<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>yarn.resourcemanager.zk-address</name>
<value>zk1:2181,zk2:2181,zk3:2181</value>
</property>
管理命令
$ yarn rmadmin -getServcieState rm1 active
$ yarn rmadmin -getServiceState rm2 standby
如果自动故障转移开启,你不能手动切换,不过可以指定-forcemanual,但是需要小心使用。
$ yarn rmadmin -transitionToStandby rm1
如果standby RM 启动并且运行后,所有web请求自动重定向所有web请求到active,除过About页面
Web Services
如果standby RM 启动并且运行后,所有web services请求自动重定向所有web请求到active。