最近在使用HBase的时候,发现使用HBase shell的list命令时出错,jps查看了一下进程,发现HMaster挂掉了,在确认Hadoop状态正常后,查看HMaster的日志,发现报错以下:
java
2015-02-17 05:46:15,212 DEBUG [master:master:60000] lock.ZKInterProcessLockBase: Released /hbase/table-lock/hbase:namespace/write-master:600000000000004 2015-02-17 05:46:15,212 FATAL [master:master:60000] master.HMaster: Master server abort: loaded coprocessors are: [] 2015-02-17 05:46:15,213 FATAL [master:master:60000] master.HMaster: Unhandled exception. Starting shutdown. org.apache.hadoop.hbase.TableExistsException: hbase:namespace at org.apache.hadoop.hbase.master.handler.CreateTableHandler.prepare(CreateTableHandler.java:120) at org.apache.hadoop.hbase.master.TableNamespaceManager.createNamespaceTable(TableNamespaceManager.java:232) at org.apache.hadoop.hbase.master.TableNamespaceManager.start(TableNamespaceManager.java:86) at org.apache.hadoop.hbase.master.HMaster.initNamespace(HMaster.java:1049) at org.apache.hadoop.hbase.master.HMaster.finishInitialization(HMaster.java:913) at org.apache.hadoop.hbase.master.HMaster.run(HMaster.java:606) at java.lang.Thread.run(Unknown Source) 2015-02-17 05:46:15,214 INFO [master:master:60000] master.HMaster: Aborting 2015-02-17 05:46:15,214 INFO [master,60000,1424180766819-BalancerChore] balancer.BalancerChore: master,60000,1424180766819-BalancerChore exiting 2015-02-17 05:46:15,215 INFO [master,60000,1424180766819-ClusterStatusChore] balancer.ClusterStatusChore: master,60000,1424180766819-ClusterStatusChore exiting 2015-02-17 05:46:15,215 INFO [CatalogJanitor-master:60000] master.CatalogJanitor: CatalogJanitor-master:60000 exiting 2015-02-17 05:46:15,216 DEBUG [master:master:60000] master.HMaster: Stopping service threads
出现两个FATAL(第二、3行),严重错误,直觉上感受跟Zookeeper有关,尝试了多种方法后,终于找出了正确解决方案,此方案来自Stack Overflow上的polaris大神(原文网址附在最后,有兴趣的能够看一下)。shell
4个步骤解决问题:apache
一、中止HBase集群;
oop
二、使用HBase的离线修复命令 测试
hbase org.apache.hadoop.hbase.util.hbck.OfflineMetaRepair
三、删除Zookeeper中已存在的HBase的旧的信息
spa
进入zookeeper客户端,注意,要在zookeeper集群启动状况下进入客户端:日志
./opt/zookeeper/bin/zkCli.sh
使用 ls / 查看zookeeper中的数据目录
code
使用 rm /hbase 删除zookeeper中的hbase数据
server
四、重启HBase集群,集群恢复正常。进程
思考:
解决这个问题后,一直在反思集群为何会忽然出现这种状况,后来终于搞明白。以前对集群测试时,在主节点上部署了一个zookeeper节点(主节点以前没有部署zookeeper),后来为防止zookeeper节点总数变成偶数,又把这个zookeeper节点删掉了。多是这个缘由形成zookeeper中已存在的hbase数据有问题,因此清空zookeeper中的hbase数据,就能解决问题了。
原文网址:http://stackoverflow.com/questions/28563167/hbase-master-not-starting-correctly