问题导读
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部分给干掉就行了。
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>192.168.1.2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>192.168.1.3</value>
</property>
<property>
<name>yarn.resourcemanager.recovery.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.store.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>192.168.1.2:2181,192.168.1.3:2181</value>
<description>For multiple zk services, separate them with comma</description>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>yarn-ha</value>
</property> 复制代码
将配置写入yarn-site.xml里面,然后分别在两台服务器正常启动RM就可以了,就像启动NN HA一样的方式
sudo -u yarn yarn-daemon.sh start resourcemanager
另外,在Hadoop的各种HA中,有个隐藏属性是很多人不知道的,就是强制切换,一般来说,我们通过命令行切换HA,需要去运行
sudo -u hdfs hdfs haadmin -transitionToActive/transitionToStandby 复制代码
或者
sudo -u yarn yarn rmadmin -transitionToActive/transitionToStandby 复制代码
但是,这种方式在启用了ZKFC做自动失效恢复的状态下是不允许修改的,提示信息里只说了可以强制执行,但是没有提供命令,其实强制切换主备命令很简单。加个forcemanual就好了。
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就好了。这个强制切换的要求就是用户必须没有任何对元数据的操作,这样才能有效的防止脑裂的发生。应该来说,进入安全模式再切换会比较稳妥一些。