J'ai mis en place un cluster hbase pour stocker les données d'opentsdb. Récemment en raison du redémarrage de certains nœuds, hbase a perdu la table "tsdb". Je peux toujours le faire sur la page du nœud maître de hbase, mais lorsque je clique dessus, cela me donne une exception 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)
......
Je suis entré dans hbase Shell, en essayant de localiser la table 'tsdb', mais j'ai reçu le même message
hbase(main):018:0> scan 'tsdb'
ROW COLUMN+CELL
ERROR: Unknown table tsdb!
Cependant, quand j'ai essayé de recréer cette table, hbase Shell m'a dit que la table existait déjà ...
hbase(main):013:0> create 'tsdb', {NAME => 't', VERSIONS => 1, BLOOMFILTER=>'ROW'}
ERROR: Table already exists: tsdb!
Et je peux aussi lister la table dans le shell hbase
hbase(main):001:0> list
TABLE
tsdb
tsdb-uid
2 row(s) in 0.6730 seconds
En regardant le journal, j'ai trouvé cela qui devrait être la cause de mon problème
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)
Il dit ne peut pas trouver la ligne de tsbb dans .META., Mais il y a effectivement des lignes de tsdb dans .META.
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
Voici le résultat après avoir lancé "hbck" sur le cluster
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
J'ai couru
bin/hbase hbck -fix
qui malheureusement ne résout pas mon problème
Quelqu'un pourrait-il m'aider à ce sujet
commander:
# 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
Merci beaucoup!
Je ne sais pas très bien pourquoi vous ne pouvez pas le scanner. Cependant, pour recréer la table, vous pouvez essayer ceci:
1) Supprimez toutes les entrées de la table .META pour cette table manuellement, et
2) Supprimer le répertoire correspondant à cette table de HDFS
Essayez de créer la table à nouveau par la suite.
Un peu tard, c'est peut-être utile pour le chercheur.
hbase zkcli
ls /hbase/table
rmr /hbase/table/TABLE_NAME
Si vous utilisez cdh4.3, le chemin dans zookeeper devrait être/hbase/table94 /
essayer de réparer méta
après et essayez à nouveau
Pour développer la réponse de @Devin Bayer, exécutez:
delete /hbase/table/<name_of_zombie_table>
si vous trouvez des tables de zombies maintenues par le gardien de zoo. Pour plus d’aide sur ce problème, vous devriez utiliser Google 'HBase zombie tables'.
Plus d'instructions sur la suppression des tables:
~/hbase-0.94.12/bin/hbase Shell
> truncate 'tsdb'
> truncate 'tsdb-meta'
> truncate 'tsdb-uid'
> truncate 'tsdb-tree'
> exit
J'ai également dû redémarrer le démon tsd.
Je fais face à ces problèmes sur mon lieu de travail. D'habitude, je supprime les znodes et eux, supprime la table correspondante ou redémarre hbase HMaster et Hregionserver pour obtenir le statut hbck OK.
Je reçois un message d'erreur similaire lorsque j'essaie une connexion HBase à partir d'un client Java sur une machine ne disposant pas du privilège TCP pour accéder aux machines HBase. La table existe bien quand I faire Shell sur la machine HBase elle-même.
Opentsdb dispose-t-il de tous les privilèges/configuration du port pour accéder à la machine HBase?
Il suffit de supprimer la table spécifiée de votre chemin zookeeper. Par exemple, si zookeeper.znode.parent est configuré pour blob dans hbase-site.xml, vous devez démarrerzkCli.sh
. dans votre serveur zookeeper Shell et supprimez ce répertoire parrmr /blob/table/tsdb
command.
hbase-clean.sh --cleanZk
Cela fonctionne bien, assez simple.