我有一个包含5个节点的集群,我在HBase上创建了几个表,并用数据填充它。其中一个节点失败了,现在我能够列出HBase上的所有表,但扫描或禁用其中两个表给出了
NativeException: org.apache.hadoop.hbase.client.NoServerForRegionException: No server address listed in .META. for region TableName,,1295871604968
我想删除此表但无法解决此问题。我正在使用hbase shell。
答案 0 :(得分:2)
我通过删除.META.
表中给出错误的表的表条目来解决问题,然后重新创建表。我认为.META.
表将位置保存到死节点上的区域,并且当节点死亡时由于某种原因无法更新区域位置。删除条目后,我能够重新创建表格。我找到了关于它的讨论here,这有助于让我走上正确的道路。
答案 1 :(得分:1)
是否可以重启节点?
HBase应该将区域重新分配给其他节点。可能有一些原因不会发生这种情况,但我能想到的一个原因是你有一个损坏的HDFS。如果您的数据节点中没有复制(或复制低于节点故障数),则可能会发生这种情况。检查文件系统(hadoop fsck /)
此外,列出您正在使用的hbase和hadoop的版本会很有帮助。如果可能的话,使用hadoop 0.20-append分支(包含在CDH3中)转移到HBase版本0.90
答案 2 :(得分: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'
答案 3 :(得分:0)
尝试
flush'.META。'
和
major_compact'.META。'
在hbase shell&尝试再次扫描桌子。
答案 4 :(得分:0)
在我们的案例中,当有人意外地将我们的一张桌子置于“禁用”状态时,我们看到了这个错误。这导致该表具有0个区域,因此“在hbase:meta中没有列出服务器地址”。修复是为了实现它被禁用然后重新启用它:
hbase is_disabled 'table name'
hbase enable 'table name'