namenode-HA问题:
- 两个或以上的namenode节点数启动后都是standby状态
解决办法:1、先查看namenode节点的状态(nn1是namenode的节点名称)
bin/hdfs haadmin -getServiceState nn1
然后使用命令切换状态即可
bin/hdfs haadmin -transitionToActive nn1
*注:手动装换如果报错,是因为配置自动转换,依靠zkfc来控制namenode的状态
dfs.ha.automatic-failover.enabled
2、手动装换失败且namenode节点都是standby状态,那么就是zkfc问题,jps查看是否启动DFSZKFailoverController,即重新启动hdfs集群和zookeeper集群,如果还没有DFSZKFailoverController进程,说明hdfs注册zookeeper集群状态信息出错,需要重新格式化hadoop集群在zookeeper集群中的状态信息,先关闭hadoop集群,使用如下命令
bin/hdfs zkfc -formatZK
注:是在hadoop安装目录下执行该命令,执行完毕后重新启动hadoop集群即可
通过jps查看,DFSZKFailoverController启动成功,再一次通过web端口访问每一个namenode节点,有一个是active状态。
resourcemanager-HA问题:
配置两个及以上的resourcemanager节点,配置了resourcemanager节点启动resourcemanager的时候,与namenode启动不一样,多个namenode可以直接通过一个sbin/start-dfs.sh全部启动,但resourcemanager的启动可以使用守护进程启动,也可以用sbin/start-yarn.sh直接启动集群中所有的nodemanager(类似sbin/start-dfs.sh启动所有的namenode和datanode)和本节点的resourcemanager,其他节点的resourcemanager是不会启动的,需要单独到其他配置了resourcemanager的节点执行启动resourcemanager命令,否则没有启动无法实现高可用。
可以用脚本直接全部启动所有,也可以挨个到配置了resourcemanager的节点去启动resourcemanager
jobhistoryserver问题:
- 启动了jobhistoryserver进程,但不能通过web浏览器端口访问
解决办法:1、查看配置文件
参考:https://blog.csdn.net/qq_23146763/article/details/71896401
2、如果启动成功进程一段时间后进程自行关闭了,检查端口是否被占用
都检查过没问题就重新启动所有集群,先启动zookeeper集群,再启动hadoop集群中的namenode,用sbin/start-dfs.sh,再启动resourcemanager,用sbin/start-yarn.sh,再启动jobhistoryserver,用sbin/mr-jobhistory-daemon.sh start historyserver(启动historyserver之前必须确定namenode和resourcemanager以及zookeeper集群都全部启动了,多个resourcemanager必须每个都要启动,最后启动historyserver)启动后
注:jobhistoryserver启动成功,也能访问后,在namenode的文件查询系统遇到权限问题
解决办法:通过hdfs修改权限即可,参考:http://www.cnblogs.com/xl-201710/p/9757961.html
集群都启动成功后,查看job情况
总结:集群是由多个组件通过一定的通信方式进行运作的,每个组件有自己的特性和兼容性,所以有时候集群组件中各个组件的配置文件都是规范的,但是集群运行报错,这就可能是组件之间的兼容性问题导致。在hadoop集群中,hdfs和zookeeper等各部分之间的问题,如果各个部分配置都没问题,可以尝试先停止所有集群组件,传出hadoop的data文件,重新格式化namenode,再启动zookeeper集群,然后从新注册hadoop在zookeeper中的状态信息(sbin/hdfs zkfc -formatZK),再启动namenode和datanode、journalnode(sbin/start-dfs.sh),再启动resourcemanager,historyserver,有其他组件再考虑顺序,zookeeper和namenode,datanode,journalnode等都是最先启动的