2012-05-14 6 views
15

Ich habe einen HBase-Cluster eingerichtet, um Daten von opentsdb zu speichern. Kürzlich hat HBase aufgrund des Neustarts einiger Knoten die Tabelle "tsdb" verloren. Ich kann es immer noch auf hbase Master-Knoten Seite, aber wenn ich darauf klicke, es gibt mir ein tableNotFoundExceptionhbase kann keine vorhandene Tabelle finden

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

ich hbase Shell eingegeben, versucht ‚tsdb‘ Tabelle zu finden, bekam aber eine ähnliche Nachricht

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

ERROR: Unknown table tsdb! 

aber als ich versuchte, diese Tabelle neu zu erstellen, sagte hbase Shell mir die Tabelle bereits existiert ...

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

ERROR: Table already exists: tsdb! 

Und ich kann auch die Tabelle in hbase Shell Liste

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

einen Blick auf das Protokoll nehmen, fand ich es, was die Ursache für mein Problem sein sollte

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) 

Es sagt nicht Reihe TSBB in .meta finden., Aber es gibt in der Tat tsdb Reihen in .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 

Hier ist das Ergebnis, nachdem ich auf dem 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 

I

bin/hbase hbck -fix 

laufen "hbck" ran, die leider nicht mein Problem

Könnte jemand löst helfen Sie mir dabei, dass

  1. Ist es möglich, diese Tabelle "tsdb" wiederherzustellen?
  2. Wenn 1 nicht möglich ist, ist es eine vorgeschlagene Möglichkeit, 'tsdb' elegant zu entfernen und eine neue zu erstellen?
  3. Ich würde sehr dankbar sein, wenn mir jemand sagen kann, was der am meisten empfohlene Weg ist, einen Knoten neu zu booten? Momentan verlasse ich meinen Master-Knoten immer. Für andere Knoten führe ich diesen Befehl sofort nach seinem Neustart aus.

Befehl:

# 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 

Vielen Dank!

+0

try hbase Diagnostik (hbase hbck) und sehen, was es heißt laufen.Siehst du es auch in HBase Shell, wenn du list eingibst? –

+0

@ ArnonRotem-Gal-Oz Vielen Dank für Ihren Vorschlag! Ich habe die Ergebnisse in "liste" und "hbck" im editierten Post aufgelistet. Können Sie mich wissen lassen, wie ich diese Inkonsistenzen von tsdb entfernen kann? – Sheng

+0

versuche 'hbase hbck -fix' –

Antwort

2

Ich bin mir nicht sicher, warum Sie es nicht scannen können. Um jedoch die Tabelle neu zu erstellen, können Sie dies versuchen:

1) Löschen Sie alle Einträge in der Tabelle .meta für diese Tabelle manuell und

2) Löschen Sie das Verzeichnis auf diese Tabelle von HDFS entsprechenden

Versuchen Sie, die Tabelle danach erneut zu erstellen.

+0

Danke. Ich versuche, die problematische Zeile in .META zu löschen, aber deleteall Befehl funktioniert nicht. Können Sie Hilf mir zu überprüfen, ob es richtig ist? Der Befehl lautet "hbase (main): 027: 0> deleteall '.META.', 'tsdb, \ x00 \ x00 \ x0FO \ xA2 \ xF1 \ xD0 \ x00 \ x00 \ x01 \ x00 \ x00 \ x0e \ x00 \ x00 \ x02 \ x00 \ x00 \ x12 \ x00 \ x00 \ x00 \ x00 \ x00 \ x13 \ x00 \ x00 \ x05 \ x00 \ x001,1336311752340.7cd0d2205d9ae5fcadf843972ec74ec5. «» Ich habe die Zeile kopiert als zweites Argument, aber danach zeigt die Shell immer noch die Zeile ist da – Sheng

+0

Ich habe ein Java-Programm geschrieben, um Zeilen aus .META zu löschen, aber mein Problem kann immer noch nicht gelöst werden OK - letzter Resor t, die Tabelle fallen – Sheng

7
hbase zk_cli 

-ls /hbase/tables 

Der Tisch war immer noch auf Zookeeper.

Die Tabelle vom Tierpfleger (rmr) gelöscht.

+0

anstelle von: -ls/hbase/Tabellen: Verwendung: ls/hbase/Tabelle – user3123372

2

Wenn Sie cdh4.3 verwenden, dann sollte der Pfad in zookeeper sein/hbase/table94/

0

Weitere Hinweise auf die Tabellen zu löschen:

~/hbase-0.94.12/bin/hbase shell 

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

musste ich auch den TSD-Daemon neu zu starten.

0

Ich erhalte eine ähnliche Fehlermeldung, wenn ich eine HBase-Verbindung von einem Java-Client auf einem Computer versuche, der nicht über die TCP-Berechtigung für den Zugriff auf HBase-Computer verfügt. Die Tabelle existiert tatsächlich, wenn ich HBAS-Shell auf dem HBase-Rechner selbst mache.

Hat opentsdb alle Privilegien/Port-Einstellungen, um auf den HBase-Rechner zugreifen zu können?

0

Ich habe diese Probleme an meinem Arbeitsplatz. Normalerweise lösche ich entweder die Znodes und sie entfernen die entsprechende Tabelle oder starten HBase sowohl HMaster als auch Hregionserver neu, um den Hbck-Status OK zu erhalten.

0

Es reicht aus, die angegebene Tabelle aus Ihrem Zookeeper-Pfad zu entfernen. Zum Beispiel, wenn zookeeper.znode.parent auf blob in hbase-site.xml konfiguriert Sie von rmr /blob/table/tsdb Befehl das Verzeichnis zkCli.sh in Ihrem zookeeper Server-Shell und entfernen Sie beginnen soll.

0

hbase-clean.sh --cleanZk

Es funktioniert gut, einfach genug.

1

Um auf @Devin Bayer Antwort zu erweitern, führen:

delete /hbase/table/<name_of_zombie_table> 

wenn Sie irgendwelche Zombie-Tabellen finden durch den Tierpfleger gehalten werden. Für weitere Hilfe zu diesem Thema sollten Sie Google HBase Zombie-Tabellen googlen.

5

Ein bisschen spät, vielleicht ist es hilfreich für den Sucher.

  1. Führen Sie die ZooKeeper Shell hbase zkcli
  2. In der Shell laufen ls /hbase/table
  3. Run rmr /hbase/table/TABLE_NAME
  4. Restart Hbase
+1

In z.B. HDP 2.6 mit Kerberos aktiviert, sind die Befehle 'hbase zkcli -server ls/hbase-secure/table' und/oder' hbase zkcli-server rmr/hbase-secure/table/ ' –

1

try

  1. hbase hbck
  2. meta zu beheben
  3. hbase hbck -fixMeta
  4. hbase hbck -fixAssignments
  5. hbase hbck -fixReferenceFiles

nach und versuchen Sie es erneut