2012-05-14 21 views
15

Ho impostato un cluster hbase per memorizzare i dati da opentsdb. Recentemente a causa del riavvio di alcuni nodi, hbase ha perso la tabella "tsdb". Posso ancora a pagina nodo master di HBase, ma quando lo scatto sopra, mi dà un tableNotFoundExceptionhbase non riesce a trovare una tabella esistente

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

entrai guscio HBase, cercando di individuare 'tsdb' tavolo, ma ho ottenuto il messaggio simile

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

ERROR: Unknown table tsdb! 

Tuttavia quando ho provato a ricreare questa tabella, guscio HBase mi ha detto al tavolo già esiste ...

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

ERROR: Table already exists: tsdb! 

e posso anche visualizzare la tabella in guscio HBase

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

Dando uno sguardo al registro, ho trovato questo che dovrebbe essere la causa del mio problema

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) 

Si dice che non riesce a trovare fila di TSBB in .meta., Ma ci sono davvero tsdb righe 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 

Ecco il risultato dopo mi sono imbattuto "hbck" sul 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 

Ho eseguito

bin/hbase hbck -fix 

che purtroppo non risolvere il mio problema

Potrebbe qualcuno aiutatemi su questo che

  1. È possibile recuperare questa tabella "tsdb"?
  2. Se 1 non può essere fatto, è un modo suggerito per rimuovere con grazia 'tsdb' e crearne uno nuovo?
  3. Sarei molto apprezzato se qualcuno può farmi sapere qual è il modo più consigliato per riavviare un nodo? Attualmente, sto lasciando il mio nodo principale sempre attivo. Per altri nodi, eseguo questo comando immediatamente dopo il suo riavvio.

comando:

# 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 

Molte grazie!

+0

tenta di eseguire la diagnostica HBase (HBase hbck) e vedere che cosa dice.Lo vedi anche nella shell di hbase quando scrivi la lista? –

+0

@ ArnonRotem-Gal-Oz Grazie per il suggerimento! Ho elencato i risultati su "elenco" e "hbck" sul post modificato. Potresti farmi sapere come posso rimuovere quelle incoerenze di tsdb? – Sheng

+0

prova 'HBase hbck -fix' –

risposta

2

Non sono molto sicuro del motivo per cui non è possibile eseguirne la scansione. Tuttavia, per ricreare la tabella, si può provare questo:

1) Cancellare tutte le voci della tabella .meta per questa tabella manualmente e

2) Eliminare la directory corrispondente a questo tavolo da HDFS

Prova a creare nuovamente la tabella dopo.

+0

Grazie. Sto cercando di eliminare la riga problematica in .META., ma il comando deleteall non funziona. aiutami a controllare se è giusto Il comando è "HBase (principale): 027: 0> DeleteAll '.meta', 'tsdb, \ x00 \ x00 \ x0FO \ xa2 \ XF1 \ xD0 \ x00 \ x00 \ x01 \ x00 \ x00 \ x0 \ x00 \ x00 \ x02 \ x00 \ x00 \ x12 \ x00 \ x00 \ x03 \ x00 \ x00 \ x13 \ x00 \ x00 \ x05 \ x00 \ x001,1336311752340.7cd0d2205d9ae5fcadf843972ec74ec5. '"Ho appena copiato la riga come secondo argomento, ma dopo che la shell mostra ancora la riga è lì – Sheng

+0

ho scritto un programma Java per eliminare la riga da .meta, ma il mio problema non è ancora possibile ottenere irrisolta OK -... la scorsa resor t, rilasciare il tavolo – Sheng

7
hbase zk_cli 

-ls /hbase/tables 

Il tavolo era ancora su Zookeeper.

Eliminata la tabella da zookeeper (rmr).

+0

anziché: -ls/hbase/tables: utilizzare: ls/hbase/table – user3123372

2

Se si utilizza cdh4.3 quindi il percorso in Zookeeper dovrebbe essere/HBase/table94/

0

Maggiori istruzioni sull'eliminazione delle tabelle:

~/hbase-0.94.12/bin/hbase shell 

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

ho anche dovuto riavviare il demone tsd.

0

Viene visualizzato un messaggio di errore simile quando provo una connessione HBase da un client Java su una macchina che non dispone del privilegio TCP per accedere alle macchine HBase. La tabella esiste effettivamente quando eseguo shell hbase sulla macchina HBase stessa.

opentsdb ha tutti i privilegi/porta config per accedere alla macchina HBase?

0

Faccio fronte a questi problemi sul posto di lavoro. Normalmente cancellerò gli znode e rimuoverò la tabella corrispondente o riavviare hbase sia HMaster che Hregionserver per ottenere lo stato di hbck OK.

0

È sufficiente rimuovere la tabella specificata dal percorso di Zookeeper. Per esempio, se zookeeper.znode.parent è configurato per blob in HBase-site.xml si dovrebbe iniziare zkCli.sh nella shell del server guardiano dello zoo e rimuovere quella directory da rmr /blob/table/tsdb comando.

0

hbase-clean.sh --cleanZk

Funziona abbastanza bene, semplice.

1

Per espandere sulla risposta di @Devin Bayer, eseguire:

delete /hbase/table/<name_of_zombie_table> 

se trovate qualsiasi tabella zombie mantenute da parte del guardiano dello zoo. Per ulteriori informazioni su questo problema, dovresti utilizzare Google 'HBase zombie tables'.

5

Un po 'in ritardo, forse è utile per l'utente.

  1. Eseguire lo ZooKeeper sborsare hbase zkcli
  2. Nella corsa shell ls /hbase/table
  3. Run rmr /hbase/table/TABLE_NAME
  4. Restart HBase
+1

In es. HDP 2.6 con Kerberos abilitato, i comandi sono 'HBase zkcli -server ls/HBase-sicuro/table' e/o' HBase zkcli -server RMR/HBase-sicuro/table/ ' –

1

tentare di risolvere meta

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

dopo e riprovare

Problemi correlati