我在 hadoop001、hadoop002 和 hadoop003 节点上安装了 HBase 集群,其中 hadoop001 和 hadoop002 为 HMaster,hadoop002 和 hadoop003 为 HRegionServer,启动 HBase 后,发现 hadoop002 的 HMaster 和 HRegionServer 进程正常启动,hadoop003 上的 HRegionServer 正常启动,但 hadoop001 上的 HMaster 进程却没有启动,查看 hadoop001 节点上的 HBASE_HOME/logs/hbase-hadoop-master-hadoop001.log 日志文件发现如下报错:
2018-05-28 18:19:14,394 FATAL [hadoop001:16000.activeMasterManager] master.HMaster: Failed to become active master
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.ipc.StandbyException): Operation category READ is not supported in state standby
at org.apache.hadoop.hdfs.server.namenode.ha.StandbyState.checkOperation(StandbyState.java:87)
at org.apache.hadoop.hdfs.server.namenode.NameNode$NameNodeHAContext.checkOperation(NameNode.java:1727)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.checkOperation(FSNamesystem.java:1352)
at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getFileInfo(FSNamesystem.java:4174)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.getFileInfo(NameNodeRpcServer.java:881)
......
我同时在 hadoop001~hadoop004节点上安装了 hadoop HA集群,查看状态发现,hadoop001 是 standby 状态,hadoop002 是 active 状态,然后我查看 hbase 集群的 hbase-site.xml 文件发现:
<property>
<name>hbase.rootdir</name>
<value>hdfs://hadoop001:9000/hbase</value>
</property>
原来我指定 hbase.rootdir 在 hadoop001 上,而我的 hadoop 集群是 HA集群,hadoop集群的 core-site.xml 中的配置是:
<property>
<name>fs.defaultFS</name>
<value>hdfs://beh/</value>
</property>
而由于 hadoop001 此时是 standby 状态,所以不能从 hadoop001 上去读取 hbase.rootdir 中的文件,导致异常的发生。
解决问题:
<property>
<name>hbase.rootdir</name>
<value>hdfs://beh/hbase</value>
</property>
问题解决!