项目场景:
- Ubuntu20.04
- Hadoop3.2.2
- Hbase2.2.2
问题描述:
主要错误如下:ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
在启动 Hbase shell 后,使用 create, list
等命令时,出现如下报错:
hbase(main):001:0> list
TABLE
ERROR: org.apache.hadoop.hbase.PleaseHoldException: Master is initializing
at org.apache.hadoop.hbase.master.HMaster.checkInitialized(HMaster.java:2452)
at org.apache.hadoop.hbase.master.MasterRpcServices.getTableNames(MasterRpcServices.java:915)
at org.apache.hadoop.hbase.protobuf.generated.MasterProtos$MasterService$2.callBlockingMethod(MasterProtos.java:58517)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:2339)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:123)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:188)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:168)
For usage try 'help "list"'
Took 10.297 seconds
原因分析:
这里我的电脑上只是单纯为 Hadoop 伪分布式集群配置了 Hbase 应用,所以像网上其他说的 Hbase 和 Zookeeper 服务器时间不一致问题我觉的是不大可能的, 主要原因应该是:Hadoop 和 Hbase 的进程不一致,导致 Master 结点一直在初始化。
解决方案:
格式化 Hadoop 中的 Hbase 文件系统,重新启动 Hbase,让两者重新同步:
先关闭所有 Hbase 服务:
cd /usr/local/hbase
bin/stop-hbase.sh
接着关闭所有 Hadoop 服务:
cd /usr/local/hadoop
sbin/stop-all.sh
输入 jps
,确保所有 Hadoop 和 Hbase 进程均已关闭:
zq@fzqs-Laptop:~$ jps
4673 Jps
接着启动 Hadoop 服务:
cd /usr/local/hadoop
sbin/start-all.sh
查看 HDFS 中的文件:
bin/hdfs dfs -ls /
输出应如下(含 /hbase):
zq@fzqs-Laptop:/usr/local/hadoop$ bin/hdfs dfs -ls /
Found 1 items
drwxr-xr-x - root supergroup 0 2021-10-28 21:49 /hbase
删除 /hbase 目录:
bin/hdfs dfs -rm -r /hbase
启动 Hbase 服务:
cd /usr/local/hbase
bin/start-hbase.sh
接着再启动 shell,应该就能用了:
bin/hbase shell
附:
若上述步骤完成仍出现 Master is initializing 等报错,则先重启电脑\虚拟机:
sudo reboot
接着打开电脑后,进入到 /usr/lcoal/hadoop 文件夹下,重新初始化文件系统(这步可能会导致你原来 HDFS 里的数据丢失):
cd /usr/lcoal/hadoop
sudo rm -rf ./tmp
bin/hdfs namenode -format
启动 Hadoop 及其相关服务:
sbin/start-all.sh
切换到 Hbase 文件夹下,启动 Hbase:
cd /usr/lcoal/hbase
bin/start-hbase.sh
接着你的 shell 应该就能正常使用啦!
bin/hbase shell