2011-01-25 51 views
2

我有一个由5个节点组成的集群,我在HBase上创建了几个表并使用数据填充它。其中一个节点失败了,现在我可以列出所有的HBase的表,但一个扫描或禁用的两个表给出了无法访问HBase表

NativeException: org.apache.hadoop.hbase.client.NoServerForRegionException: No server address listed in .META. for region TableName,,1295871604968

我想删除该表,但不能让过去这个问题。我为此使用了hbase shell。

+0

对于它的价值,事实上很久以后...当我创建一个Snappy压缩表时,我看到了这个错误,但是还没有将Snappy设置为HBase。我尝试改变表格将压缩设置为NONE,但错误仍然存​​在。然后我丢弃并重新创建表格,错误消失。 – dnuttle 2013-08-28 23:48:38

+0

我通过访问hbase shell来解决我的问题,禁用'table'并启用它,这要归功于@WattsInABox的想法 – javinc 2015-12-13 03:35:53

回答

2

我解决了这个问题,通过删除表中出现错误的表的.META.表条目,然后重新创建表。我认为.META.表将节点的位置保存到死区节点上的区域,并且在节点死亡时由于某种原因无法更新区域位置。条目被删除后,我可以重新创建表格。我发现了一个关于here的讨论,它可以帮助我发现正确的道路。

1

是否可以重新启动节点?

HBase应该将区域重新分配给其他节点。可能有几个原因不会发生,但是我可以从头顶上想到的一个原因是您的HDFS已损坏。如果您的数据节点中没有复制(或复制数量低于节点失败次数),则可能会发生这种情况。检查您的文件系统(hadoop fsck /)

此外,列出您正在使用的hbase和hadoop的版本也很有帮助。如果可能的话,使用hadoop 0.20-append分支(包含在CDH3中)转到HBase 0.90版本

+0

没有进入节点的重新启动,该节点被打破。 – Cornelius 2011-01-28 09:56:52

0

我们遇到了类似的问题,但是我们发誓我们没有节点。然而,不管它是如何发生的(因为我们还不太确定),我们如何解决它是我们拍摄了一张搞砸的表格的快照,并从该快照中重新创建了表格。

scan 'mytable' 
ERROR: No server address listed in hbase:meta for region mytable,,1408136497251.5110a0bae8315ed52af93663401ab415. containing row 

原来,即使表在表元搞砸,该数据没有搞砸,我们能够把它,删除和克隆的一个新的快照。

snapshot 'mytable', 'mytable-Snapshot-2014-08-25' 
disable 'mytable' 
drop 'mytable' 
clone_snapshot 'mytable-Snapshot-2014-08-25', 'mytable' 
0

尝试

冲洗 '.META。'

major_compact '.META。'

在hbase shell &尝试再次扫描表。

0

在我们的案例中,当有人意外地将我们的某个表格置于“禁用”状态时,我们发现这个错误。这导致该表具有0个区域,因此“在hbase:meta中没有列出服务器地址”。此修复程序是意识到这是禁用,然后重新启用它:

hbase is_disabled 'table name'

hbase enable 'table name'