ResourceManager的HA

大家都知道在hadoop2中对HDFS的改进很大,实现了NameNode的HA;也增加了ResourceManager。但是ResourceManager也可以实现HA。你没看错,确实是ResourceManager的HA。注意是在Apache Hadoop 2.4.1版本中开始加入的,可不是任意一个版本。

我们不讲单点问题的危害,直接讲如何配置ResourceManager的HA。

HA的架构

ResourceManager的HA

如果大家理解HDFS的HA,那么ResourceManager的HA与之是相同道理的:也是Active/Standby架构,任意时刻,都一个是Active,其余处于Standby状态的ResourceManager可以随时转换成Active状态。状态转换可以手工完成,也可以自动完成。手工完成时通过命令行的管理命令(命令是“yarn rmadmin”)。自动完成是通过配置自动故障转移(automatic-failover),使用集成的failover-controller完成状态的自动切换。

自动故障转移是依赖于ZooKeeper集群,依赖ZooKeeper的ActiveStandbyElector会嵌入到ResourceManager中,当Active状态的ResourceManager失效时,处于 Standby状态的ResourceManager就会被选举为Active状态的,实现切换。注意:这里没有ZooKeeperFailoverController进程,这点和HDFS的HA不同。

对于客户端而言,必须知道所有的ResourceManager中。因此,需要在yarn-site.xml中配置所有的ResourceManager。那么,当一个Active状态的ResourceManager失效时,客户端怎么办哪?客户端会采用轮询机制,轮询配置在yarn-site.xml中的ResourceManager,直到找到一个active状态的ResourceManager。如果我们想修改这种寻找ResourceManager的机制,可以继承类org.apache.hadoop.yarn.client.RMFailoverProxyProvider,实现自己的逻辑。然后把类的名字配置到yarn-site.xml的配置项yarn.client.failover-proxy-provider中。

配置

在yarn-site.xml中配置如下

 <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 –getServiceState rm1

状态切换的命令

yarn rmadmin –transitionToStandby rm1

【翻译自http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html】

上一篇:第16月第31天 mongo


下一篇:Java实现匿名内部类的简单应用