18

我建立了一个 hbase 集群来存储来自 opentsdb 的数据。最近由于部分节点重启,hbase 丢失了“tsdb”表。我仍然可以在 hbase 的主节点页面上,但是当我点击它时,它给了我一个 tableNotFoundException

org.apache.hadoop.hbase.TableNotFoundException: tsdb
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegionInMeta(HConnectionManager.java:952)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:818)
    at org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation.locateRegion(HConnectionManager.java:782)
    at org.apache.hadoop.hbase.client.HTable.finishSetup(HTable.java:249)
    at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:213)
    at org.apache.hadoop.hbase.client.HTable.<init>(HTable.java:171)
......

我进入 hbase shell,试图找到“tsdb”表,但得到了类似的消息

hbase(main):018:0> scan 'tsdb'
ROW                                                          COLUMN+CELL

ERROR: Unknown table tsdb!

但是,当我尝试重新创建此表时,hbase shell 告诉我该表已经存在...

hbase(main):013:0> create 'tsdb', {NAME => 't', VERSIONS => 1, BLOOMFILTER=>'ROW'}

ERROR: Table already exists: tsdb!

而且我还可以在 hbase shell 中列出表

hbase(main):001:0> list
TABLE
tsdb
tsdb-uid
2 row(s) in 0.6730 seconds

查看日志,我发现这应该是我的问题的原因

2012-05-14 12:06:22,140 WARN org.apache.hadoop.hbase.client.HConnectionManager$HConnectionImplementation: Encountered problems when prefetch META table:
org.apache.hadoop.hbase.TableNotFoundException: Cannot find row in .META. for table: tsdb, row=tsdb,,99999999999999
    at org.apache.hadoop.hbase.client.MetaScanner.metaScan(MetaScanner.java:157)
    at org.apache.hadoop.hbase.client.MetaScanner.access$000(MetaScanner.java:52)
    at org.apache.hadoop.hbase.client.MetaScanner$1.connect(MetaScanner.java:130)
    at org.apache.hadoop.hbase.client.MetaScanner$1.connect(MetaScanner.java:127)

它说在.META中找不到tsbb行,但.META中确实有tsdb行。

hbase(main):002:0> scan '.META.'
ROW                                                          COLUMN+CELL
 tsdb,\x00\x00\x0FO\xA2\xF1\xD0\x00\x00\x01\x00\x00\x0E\x00\ column=info:regioninfo, timestamp=1336311752799, value={NAME => 'tsdb,\x00\x00\x0FO\xA2\xF1\xD0\x00\x00\x01\x00\x00\x0E\x00\x00\x02\x00\x00\x12\x00\x00\x03\x00\x00\x13\x00\x00\x
 x00\x02\x00\x00\x12\x00\x00\x03\x00\x00\x13\x00\x00\x05\x00 05\x00\x001,1336311752340.7cd0d2205d9ae5fcadf843972ec74ec5.', STARTKEY => '\x00\x00\x0FO\xA2\xF1\xD0\x00\x00\x01\x00\x00\x0E\x00\x00\x02\x00\x00\x12\x00\x00\x03\x00\x00\x13\x00\
 \x001,1336311752340.7cd0d2205d9ae5fcadf843972ec74ec5.       x00\x05\x00\x001', ENDKEY => '\x00\x00\x10O\xA3\x8C\x80\x00\x00\x01\x00\x00\x0B\x00\x00\x02\x00\x00\x19\x00\x00\x03\x00\x00\x1A\x00\x00\x05\x00\x001', ENCODED => 7cd0d2205d9ae5f
                                                             cadf843972ec74ec5,}
 tsdb,\x00\x00\x0FO\xA2\xF1\xD0\x00\x00\x01\x00\x00\x0E\x00\ column=info:server, timestamp=1337011527000, value=brycobapd01.usnycbt.amrs.bankofamerica.com:60020
 x00\x02\x00\x00\x12\x00\x00\x03\x00\x00\x13\x00\x00\x05\x00
 \x001,1336311752340.7cd0d2205d9ae5fcadf843972ec74ec5.
 tsdb,\x00\x00\x0FO\xA2\xF1\xD0\x00\x00\x01\x00\x00\x0E\x00\ column=info:serverstartcode, timestamp=1337011527000, value=1337011518948
......

 tsdb-uid,,1336081042372.a30d8074431c6a31c6a0a30e61fedefa.   column=info:server, timestamp=1337011527458, value=bry200163111d.usnycbt.amrs.bankofamerica.com:60020
 tsdb-uid,,1336081042372.a30d8074431c6a31c6a0a30e61fedefa.   column=info:serverstartcode, timestamp=1337011527458, value=1337011519807
6 row(s) in 0.2950 seconds

这是我在集群上运行“hbck”后的结果

ERROR: Region hdfs://slave-node-1:9000/hbase/tsdb/249438af5657bf1881a837c23997747e on HDFS, but not listed in META or deployed on any region server
ERROR: Region hdfs://slave-node-1:9000/hbase/tsdb/4f8c65fb72910870690b94848879db1c on HDFS, but not listed in META or deployed on any region server
ERROR: Region hdfs://slave-node-1:9000/hbase/tsdb/63276708b4ac9f11e241aca8b56e9def on HDFS, but not listed in META or deployed on any region server
ERROR: Region hdfs://slave-node-1:9000/hbase/tsdb/e54ee4def67d7f3b6dba75a3430e0544 on HDFS, but not listed in META or deployed on any region server
ERROR: (region tsdb,\x00\x00\x0FO\xA2\xF1\xD0\x00\x00\x01\x00\x00\x0E\x00\x00\x02\x00\x00\x12\x00\x00\x03\x00\x00\x13\x00\x00\x05\x00\x001,1336311752340.7cd0d2205d9ae5fcadf843972ec74ec5.) First region should start with an empty key.  You need to  create a new region and regioninfo in HDFS to plug the hole.
ERROR: Found inconsistency in table tsdb
Summary:
  -ROOT- is okay.
    Number of regions: 1
    Deployed on:  master-node,60020,1337011518948
  .META. is okay.
    Number of regions: 1
    Deployed on:  slave-node-2,60020,1337011519845
Table tsdb is inconsistent.
    Number of regions: 5
    Deployed on:  slave-node-2,60020,1337011519845 slave-node-1,60020,1337011519807 master-node,60020,1337011518948
  tsdb-uid is okay.
    Number of regions: 1
    Deployed on:  slave-node-1,60020,1337011519807
5 inconsistencies detected.
Status: INCONSISTENT

我跑了

bin/hbase hbck -fix

不幸的是,这并不能解决我的问题

有人可以帮我解决这个问题吗

  1. 是否可以恢复此表“tsdb”?
  2. 如果 1 无法完成,是否建议优雅地删除“tsdb”并创建一个新的?
  3. 如果有人可以让我知道重新启动节点的最建议方法是什么,我将不胜感激?目前,我让我的主节点始终处于运行状态。对于其他节点,我在重新启动后立即运行此命令。

命令:

# start data node
bin/hadoop-daemon.sh start datanode
bin/hadoop-daemon.sh start jobtracker    
# start hbase
bin/hbase-daemon.sh start zookeeper
bin/hbase-daemon.sh start regionserver 

非常感谢!

4

10 回答 10

10

有点晚了,也许它对搜索者有帮助。

  1. 运行 ZooKeeper 外壳hbase zkcli
  2. 在外壳运行ls /hbase/table
  3. rmr /hbase/table/TABLE_NAME
  4. 重启Hbase
于 2017-02-22T08:53:44.627 回答
2

我不太确定您为什么无法扫描它。但是,要重新创建表,您可以尝试以下操作:

1)手动删除该表的.META表中的所有条目,并且

2)从HDFS中删除该表对应的目录

之后再次尝试创建表。

于 2012-05-14T17:44:17.603 回答
2

如果您使用的是 cdh4.3,那么 zookeeper 中的路径应该是 /hbase/table94/

于 2013-08-06T08:34:24.793 回答
1

要扩展@Devin Bayer 的答案,请运行:

delete /hbase/table/<name_of_zombie_table>

如果您发现动物园管理员正在维护任何僵尸表。有关此问题的更多帮助,您应该搜索“HBase 僵尸表”。

于 2016-09-22T12:11:32.630 回答
1

尝试修复元

  1. hbase hbck
  2. hbase hbck -fixMeta
  3. hbase hbck -fixAssignments
  4. hbase hbck -fixReferenceFiles

之后再试一次

于 2017-05-11T08:14:50.240 回答
0

有关删除表的更多说明:

~/hbase-0.94.12/bin/hbase shell

> truncate 'tsdb'
> truncate 'tsdb-meta'
> truncate 'tsdb-uid'
> truncate 'tsdb-tree'
> exit

我还不得不重新启动 tsd 守护进程。

于 2014-03-07T23:41:08.503 回答
0

当我在没有访问 HBase 机器的 TCP 权限的机器上尝试来自 Java 客户端的 HBase 连接时,我收到了类似的错误消息。当我在 HBase 机器上执行 hbase shell 时,该表确实存在。

opentsdb 是否具有访问 HBase 机器的所有权限/端口配置?

于 2014-09-11T18:01:48.747 回答
0

我在工作场所确实面临这些问题。我通常要么删除 znodes 并删除相应的表,要么重新启动 hbase HMaster 和 Hregionserver 以使 hbck 状态正常。

于 2015-07-24T16:17:36.900 回答
0

从 Zookeeper 路径中删除指定的表就足够了。例如,如果zookeeper.znode.parent配置为hbase-site.xml 中的blob,您应该在 zookeeper 服务器 shell 中启动并通过命令zkCli.sh删除该目录。rmr /blob/table/tsdb

于 2015-08-25T14:17:42.583 回答
0

hbase-clean.sh --cleanZk

它工作得很好,很简单。

于 2016-07-03T13:41:12.260 回答