测试环境:
一个namenode
一个secondary namenode,以实现namenode的HA
三个datanode节点
两个RM,以实现Resource Manager的HA
共部署了7个虚拟机,操作系统是Ubuntu 14. 所有虚拟机是在本机加载,所以为了节省资源,Zookeeper分别部署在三个datanode节点上。
Hadoop的sbin目录下的start-all.sh已经不建议使用,代替的是单独启动各个命令,比如start-dfs.sh, start-yarn.sh. 但是从学习的角度看,使用start-all.sh,可以直接看出正确的启动顺序。
运行start-dfs.sh:
- namenode
- secondary namenode (HA node)
- all datanodes
- all journalnodes
- ZK Failover Controllers (on namenode and sceondary node)
运行start-yarn.sh
- resource manager
- all nodemanager
注意:我的测试环境里Zookeeper是单独配置的,所以在上面两个命令启动前启动,找到Zookeeper的安装目录/bin,运行./zkServer.sh start.
另外,碰到一个奇怪的问题,因为RM是配置了HA,并且放在单独的两台机器上,第一次配置好了以后,在namenode下,如果启动yarn,比如start-yarn.sh,resource manager能够自动启动起来,但只启动一个,网上有资料说这个是bug。但是过了一段时间后,resource manager通过上述方式完全启动不起来,查看namenode的log,会报下面的异常:
2016-05-02 02:38:47,523 FATAL org.apache.hadoop.yarn.server.resourcemanager.ResourceManager: Error starting ResourceManager
org.apache.hadoop.yarn.exceptions.YarnRuntimeException: Invalid configuration! Can not find valid RM_HA_ID. None of yarn.resourcemanager.address.rm1 yarn.resourcemanager.address.rm2 are matching the local address OR yarn.resourcemanager.ha.id is not specified in HA Configuration
解决办法也比较简单,直接登录到Resource Manager所在的机器上,单独启动RM即可,使用的命令如下:
yarn-daemon.sh start resourcemanager