问题导读


1.ResourceManager HA需要修改哪些配置?

2.如何强制切换HA?



Hadoop 2.2没怎么关注过,太新,bug太多。2.4出来以后关注了一些东西,比如2.4里面直接带了ResourceManager的高可用,这点比较吸引人。之前2.2没注意有没有,貌似是没有,然后CDH自己出了一个解决方案,这次2.4的更新直接自己带了,还不错,这样就全了,Namenode有HA和Federation,RM也有了HA,而且也可以通过ZKFC自动做故障切换。大概从2.4开始,Hadoop就可以往生产环境逐渐切换了。




直接记录配置 RM HA 的最小需求和配置项。跟NN的HA一样,RM的HA也需要两台机器硬件配置相同,这个没什么可解释的了,当初1代的时候,NN和SNN就必须是一模一样的硬件配置。就像配置NN的HA一样,RM的HA也需要给出servicename。以下配置是配置RM自动失效恢复的配置项,大概没多少人会用到手动恢复吧,用手动恢复就把zookeeper部分给干掉就行了。



1.  <property>
2.      <name>yarn.resourcemanager.ha.enabled</name>
3.      <value>true</value>
4.    </property>
5.  
6.    <property>
7.      <name>yarn.resourcemanager.ha.rm-ids</name>
8.      <value>rm1,rm2</value>
9.    </property>
10.  
11.    <property>
12.      <name>yarn.resourcemanager.hostname.rm1</name>
13.      <value>192.168.1.2</value>
14.    </property>
15.  
16.    <property>
17.      <name>yarn.resourcemanager.hostname.rm2</name>
18.      <value>192.168.1.3</value>
19.    </property>
20.  
21.    <property>
22.      <name>yarn.resourcemanager.recovery.enabled</name>
23.      <value>true</value>
24.    </property>
25.  
26.    <property>
27.      <name>yarn.resourcemanager.store.class</name>
28.      <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
29.    </property>
30.  
31.    <property>
32.      <name>yarn.resourcemanager.zk-address</name>
33.      <value>192.168.1.2:2181,192.168.1.3:2181</value>
34.      <description>For multiple zk services, separate them with comma</description>
35.    </property>
36.  
37.    <property>
38.        <name>yarn.resourcemanager.cluster-id</name>
39.        <value>yarn-ha</value>
40.    </property>


复制代码





将配置写入yarn-site.xml里面,然后分别在两台服务器正常启动RM就可以了,就像启动NN HA一样的方式


sudo -u yarn yarn-daemon.sh start resourcemanager


另外,在Hadoop的各种HA中,有个隐藏属性是很多人不知道的,就是强制切换,一般来说,我们通过命令行切换HA,需要去运行




1.  sudo -u hdfs hdfs haadmin -transitionToActive/transitionToStandby


复制代码




或者


1.  sudo -u yarn yarn rmadmin -transitionToActive/transitionToStandby


复制代码




但是,这种方式在启用了ZKFC做自动失效恢复的状态下是不允许修改的,提示信息里只说了可以强制执行,但是没有提供命令,其实强制切换主备命令很简单。加个forcemanual就好了。



1.  sudo -u hdfs hdfs haadmin -transitionToActive --forcemanual nn1


复制代码




但是这样做的后果是,ZKFC将停止工作,你将不会再有自动故障切换的保障,但是有些时候,这是必须的,特别是有时候,Hadoop的NN在ZKFC正常工作的情况下,也会出现两个standby,两个standby的问题就在于诸如Hive和Pig这种东西,会直接报一个什么 Operation category READ is not supported in state standby 什么什么的,甚至你看着明明一个是active,一个是standby,也会报这个错误,这时候就必须手动强制切换了,强制切换完以后,别忘了重新启动ZKFC就好了。这个强制切换的要求就是用户必须没有任何对元数据的操作,这样才能有效的防止脑裂的发生。应该来说,进入安全模式再切换会比较稳妥一些。