有图可知,ResourceManager(RM)对整个集群的重要就不言而喻了吧。但是由于多种原因可能会造成ResourceManager出现问题,由于单位的集群ResourceManager也出现问题,今天我分析一下ResourceManager的High Availability(高可用性)。
ResourceManager的作用:负责协调集群上计算资源的分配,与NodeManager、MRApplicationMaster、HeartBeat等进行进行交互。
ResourceManager的高可用性:在Hadoop-2.4之前,ResourceManager是集群的单点故障。ResourceManager的高可用性是以“Active/Standby(活动/备用)”的形式增加一个节点冗余,并利用Zookeeper集群,把Active的ResourceManager状态信息写入Zookeeper用于启动Standby ResourceManager,以消除这个单点故障。如下图所示。
ResourceManager HA是通过“Active/Standby”架构来实现的。一个ResourceManager处于活动状态,一个或多个ResourceManager处于备用状态以实现接管活动状态下的发生的任何状况。当Active出现状况需要自动启用Standby的ResourceManager时,时通过Failover-Controller(故障转移控制器)来实现的。
官网:
http://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/ResourceManagerHA.html
当不启用自动故障转移时,管理员必须手动将其中一个ResourceManager由Standby状态转换为Active状态。从一个ResourceManager转移到另一个ResourceManager需要首先将Active状态的ResourceManager转换为Standby状态的ResourceManager,之后才可将Standby状态ResourceManager装换为Active状态的 ResourceManager,这些操作都是通过“yarn rmadmin CLI”来完成。
在集群中任意节点上启动Zookeeper的zkfc的初始化状态:
sudo -u hdfs zkfc -formatZK
启动自动故障转移功能,start-dfs.sh脚本将在任何运行NameNode的主机上自动启动ZKFC守护进程,一旦ZKFC启动完毕则自动选择一个Standby NameNode最为新的Active NameNode。若手动管理集群中的服务,可在每台Standby NameNode上执行命令:
sudo -u hadoop-daemon.sh start zkfc
或者手动转换的命令:
sudo -u hdfs haadmin -transitionToActive/transitionToStandby
其中haadmin工具是用运行HDFS HA的管理客户端工具
可以选择嵌入基于Zookeeper的ActiveStandbyElector来决定哪个RM应该是启动的,当RM的活动停止或无响应时,另一个RM被自动选择为Active RM,整个集群的资源调配功能由新的Active RM来接管。但是,RM HA不需要像HDFS那样运行单独的ZKFC守护进行,因为嵌入在RM中的ActiveStandbyElector充当故障检测器和Leader Elector,而不是单独的ZKFC进程。
当有多个RM时,把集群中的所有的yarn-site.xml配置文件中添加所有的RM的主机名或IP地址。MRApplicationMaster和NodeManager尝试以循环方式连接RM,直到它们连接Active RM,若ResourceManager停止或无响应,它们将继续轮询直到遇到新的Active为止。
关于ResourceManager高可用性的yarn-site.xml文件的部分配置:
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.recovery.enabled
true
yarn.resourcemanager.cluster-id
zysdmaster000
yarn.resourcemanager.ha.rm-ids
standbymaster000,standbymaster001
yarn.resourcemanager.hostname.rm1
standbymaster000
yarn.resourcemanager.hostname.rm2
standbymaster001
yarn.resourcemanager.webapp.address.rm1
standbymaster000:8088
yarn.resourcemanager.webapp.address.rm2
standbymaster001:8088
yarn.resourcemanager.zk-address
zysdslave001:2181,zysdslave002:2181,zysdslave003:2181,zysdslave004:2181