1. 问题描述
在使用hbase命令时抛出如下异常
hbase(main):002:0> list_namespace
NAMESPACE
ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
at org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2966)
at org.apache.hadoop.hbase.master.HMaster.getNamespaces(HMaster.java:3262)
at org.apache.hadoop.hbase.master.MasterRpcServices.listNamespaceDescriptors(MasterRpcServices.java:1203)
at org.apache.hadoop.hbase.shaded.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:413)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:131)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304)
List all namespaces in hbase. Optional regular expression parameter could
be used to filter the output. Examples:
hbase> list_namespace
hbase> list_namespace 'abc.*'
Took 9.3384 seconds
2. 问题分析
原因是我删除了原来的 hbase, 然后将 hbase 重装以后 zookeeper 中的元数据产生了冲突, 导致hbase master 一直在初始化状态, 我们需要将 之前的hbase元数据从hbase 中删除, 然后重启 hbase
3. 解决问题
# 1. 进入 zookeeper 命令行
[root@node1 bin]# ./zkCli.sh
Connecting to localhost:2181
# 查看 zookeeper 中的 hbase目录
[zk: localhost:2181(CONNECTED) 0] ls /
[cluster, brokers, storm, infra-solr, zookeeper, hbase-unsecure, dubbo, admin, isr_change_notification, dolphinscheduler, log_dir_event_notification, xsight, hiveserver2, controller_epoch, hiveserver2-leader, kafka-manager, rmstore, consumers, ambari-metrics-cluster, latest_producer_id_block, config, hbase]
# 删除 hbase 的相关文件夹
[zk: localhost:2181(CONNECTED) 2] rmr /hbase
[zk: localhost:2181(CONNECTED) 2] rmr hbase-unsecure
# 删除之后重启 hbase
4. 测试效果
hbase(main):002:0*
hbase(main):003:0* list_namespace
NAMESPACE
default
hbase
2 row(s)
Took 9.8397 seconds
5. 注意:
我这里情况是 因为新旧 hbase 元数据冲突导致的, 并且 hbase 里面没有任何数据, 如果你遇到这个问题, 首先要确定是否是 元数据冲突导致, 还有一点, 如果你的 hbase 已经有大量数据的情况下, 不适用这种方法。