2012-05-14 16 views
15

Konfiguruję klaster hbase do przechowywania danych z opentsdb. Ostatnio z powodu restartu niektórych węzłów, hbase stracił tabelę "tsdb". I może jeszcze to na głównej stronie węzła HBase, ale po kliknięciu na nią, ona daje mi tableNotFoundExceptionhbase nie może znaleźć istniejącej tabeli

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

wszedłem HBase powłokę, starając się zlokalizować „tsdb” tabela, ale dostał podobną wiadomość

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

ERROR: Unknown table tsdb! 

jednak gdy próbowałem odtworzyć tę tabelę, HBase shell mi tabela już istnieje ...

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

ERROR: Table already exists: tsdb! 

I mogę również wymienić stół w HBase skorupy

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

Przyjrzeniu dzienniku, znalazłem to co powinno być powodem mojego problemu

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) 

Mówi ona nie może znaleźć wiersz TSBB w .meta., Ale faktycznie istnieją tsdb wiersze .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 

Oto wynik po wpadłem "hbck" na klastrze

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 

Mam biegać

bin/hbase hbck -fix 

która niestety nie rozwiązuje mój problem

Czyżby ktoś pomóżcie mi w tym, że

  1. Czy można odzyskać tę tabelę "tsdb"?
  2. Jeśli nie można wykonać 1, czy jest to sugerowany sposób, aby z wdziękiem usunąć "tsdb" i utworzyć nowy?
  3. Byłbym bardzo wdzięczny, gdyby ktoś mógł dać mi znać, jaki jest najbardziej sugerowany sposób na ponowne uruchomienie węzła? Obecnie zawsze zostawiam mój główny węzeł. W przypadku innych węzłów uruchamiam to polecenie natychmiast po ponownym uruchomieniu.

polecenie:

# 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 

Dziękujemy!

+0

spróbuj uruchomić diagnostykę HBase (HBase hbck) i zobaczyć, co ona mówi.Czy widzisz go także w powłoce hbase podczas wpisywania listy? –

+0

@ ArnonRotem-Gal-Oz Dzięki za sugestię! Podpisałem wyniki na "liście" i "hbck" na edytowanym poście. Czy możesz dać mi znać, w jaki sposób mogę usunąć te niespójności tsdb? – Sheng

+0

spróbuj 'hbase hbck -fix' –

Odpowiedz

2

Nie jestem pewien, dlaczego nie możesz go zeskanować. Jednak, aby odtworzyć tabelę, można spróbować to:

1) Usuń wszystkie wpisy w tabeli .meta dla tej tabeli ręcznie, a

2) Usuń katalog odpowiadający tej tabeli z HDFS

Spróbuj ponownie utworzyć tabelę po tym.

+0

Dzięki. Próbuję usunąć problematyczny wiersz w .META., ale polecenie deleteall nie działa. pomóż mi sprawdzić, czy to prawda? Polecenie to "hbase (main): 027: 0> deleteall" .META. ',' tsdb, \ x00 \ x00 \ x0FO \ xA2 \ xF1 \ xD0 \ x00 \ x00 \ x01 \ x00 \ x00 \ x0E \ x00 \ x00 \ x00 \ x03 \ x00 \ x00 \ x13 \ x00 \ x00 \ x05 \ x001,1336311752340.7cd0d2205d9ae5fcadf843972ec74ec5. "" Właśnie skopiowałem wiersz jako drugi argument, ale po tym powłoka nadal pokazuje wiersz jest tam: – Sheng

+0

Napisałem program java, aby usunąć wiersz z .META., ale mój problem nadal nie może zostać rozwiązany. t, upuść tabelę – Sheng

7
hbase zk_cli 

-ls /hbase/tables 

Stół nadal znajdował się na Zookeeper.

Usunięto tabelę z zookeepera (rmr).

+0

zamiast: -ls/hbase/tables: use: ls/hbase/table – user3123372

2

Jeśli używasz cdh4.3 następnie ścieżka w Heca powinny być/HBase/table94/

0

Więcej wskazówek na temat usuwania tabel:

~/hbase-0.94.12/bin/hbase shell 

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

miałem też zrestartować demona TSD.

0

Otrzymuję podobny komunikat o błędzie, gdy próbuję połączenia HBase z klienta Java na komputerze, który nie ma uprawnień TCP do dostępu do maszyn HBase. Tabela rzeczywiście istnieje, gdy wykonuję powłokę hbase na samej maszynie HBase.

Czy opentsdb ma wszystkie uprawnienia/port config, aby uzyskać dostęp do urządzenia HBase?

0

Zajmuję się tymi problemami w moim miejscu pracy. Zwykle usuwam znodes i usuwam odpowiednią tabelę lub restartuję hbase zarówno HMaster, jak i Hregionserver, aby uzyskać status hbck OK.

0

Wystarczy usunąć określoną tabelę ze ścieżki zookeepera. Na przykład jeśli zookeeper.znode.parent jest skonfigurowany do blob w HBase-site.xml należy zacząć zkCli.sh w swojej skorupie serwerze Heca i usuń ten katalog przez rmr /blob/table/tsdb polecenia.

0

hbase-clean.sh --cleanZk

To działa wystarczająco dobrze, proste.

1

Aby rozwinąć na odpowiedź @Devin Bayera, uruchom:

delete /hbase/table/<name_of_zombie_table> 

jeśli znajdziesz jakieś tabele zombie utrzymywany przez Heca. Aby uzyskać więcej pomocy na ten temat, powinieneś google "HBase zombie tabele".

5

Trochę za późno, może to pomocne dla wyszukiwarki.

  1. Uruchom Heca shell hbase zkcli
  2. W perspektywie powłoki ls /hbase/table
  3. Run rmr /hbase/table/TABLE_NAME
  4. Restart HBase
+1

HDP 2.6 z włączoną obsługą Kerberos, polecenia są 'hbase zkcli -server ls/hbase-secure/table' i/lub' hbase zkcli -server rmr/hbase-secure/table/ ' –

1

spróbować naprawić meta

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

po i spróbuj ponownie