web-dev-qa-db-fra.com

hbase ne peut pas trouver une table existante

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

  1. Est-il possible de récupérer cette table "tsdb"?
  2. Si on ne peut pas le faire, est-ce une façon suggérée de supprimer gracieusement 'tsdb' et d'en créer un nouveau?
  3. Je serais très heureux si quelqu'un pouvait me faire savoir quel est le moyen le plus suggéré de redémarrer un nœud? Actuellement, je laisse mon nœud maître toujours actif. Pour les autres nœuds, j'exécute cette commande immédiatement après son redémarrage.

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!

17
Sheng

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.

2
Hari Menon

Un peu tard, c'est peut-être utile pour le chercheur.

  1. Exécuter le shell ZooKeeper hbase zkcli
  2. Dans le shell, exécutez ls /hbase/table
  3. Exécuter rmr /hbase/table/TABLE_NAME
  4. Redémarrer Hbase
8
feng ce

Si vous utilisez cdh4.3, le chemin dans zookeeper devrait être/hbase/table94 /

2
bubby

essayer de réparer méta

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

après et essayez à nouveau

1
CoolcoolT

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'.

1
Nikhil Vandanapu

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. 

0

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. 

0
rakeeee

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?

0
Bob Yoplait

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/tsdbcommand.

0
Malemi

hbase-clean.sh --cleanZk

Cela fonctionne bien, assez simple.

0
user4869334