场景模拟
1. 正常情况
模拟ERROR: KeeperErrorCode = NoNode for /hbase/master
错误场景。
正常情况下创建hbase表如下图所示。
2. 删除hbase集群的zk节点
进入zookeeper客户端。
shell
zkCli.sh
删除hbase的zk节点。
zookeeper
deleteall /hbase
退出zookeeper客户端。
zookeeper
quit
3. 重启hbase集群
3.1 单独停止 master 和 regionserver
在虚拟机Hadoop1执行stop-hbase.sh命令不能成功停止hbase集群,则在虚拟机Hadoop1执行如下命令单独停止master。
shell
hbase-daemon.sh stop master
在虚拟机Hadoop2和Hadoop3执行如下命令单独停止regionserver。
shell
hbase-daemon.sh stop regionserver
3.2 启动hbase集群
在虚拟机Hadoop1执行如下命令启动hbase集群。
shell
start-hbase.sh
进入hbase客户端。
shell
hbase shell
4. 再次创建表
再次创建表时,可以看到使用create创建表时报错ERROR: KeeperErrorCode = NoNode for /hbase/master。
原因分析
通过上面的情景模拟,我们可以看到报错的原因在于zookeeper中出现问题,可能是zookeeper中的/hbase/master被删除,或者是在hbase集群启动之后重新安装了zookeeper,导致zookeeper中的/hbase/master节点数据异常。
解决方案
1. 停止hbase对应服务进程
1.1 单独停止 master 和 regionserver
在虚拟机Hadoop1执行如下命令单独停止master。
shell
hbase-daemon.sh stop master
在虚拟机Hadoop2和Hadoop3执行如下命令单独停止regionserver。
shell
hbase-daemon.sh stop regionserver
2. 删除hdfs上hbase生成的数据目录
shell
hdfs dfs -rm -r /hbase
3. 进入zookeeper客户端,删除对应hbase的节点
进入zookeeper客户端。
shell
zkCli.sh
删除hbase的zk节点。
zookeeper
deleteall /hbase
退出zookeeper客户端。
zookeeper
quit
4. 删除hbase在Linux本地的临时数据目录
在虚拟机Hadoop1执行如下命令删除hbase在Linux本地的临时数据目录。
shell
rm -rf /export/data/hbase2.4.18
5. 重新启动hbase集群
在虚拟机Hadoop1执行如下命令重新启动hbase集群。
shell
start-hbase.sh
进入hbase客户端。
shell
hbase shell
再次创建表,可以看到创建成功。