Usare lo strumento Apache HBase HBCK2
Questo articolo illustra come usare lo strumento HBase HBCK2. HBCK2 è lo strumento di ripristino per i cluster Apache HBase.
Panoramica di HBCK2
HBCK2 è attualmente uno strumento semplice che esegue una sola cosa alla volta. In hbase-2.x, il Master è l'arbitro finale di tutti gli stati, quindi un principio generale per la maggior parte dei comandi HBCK2 è che chiede al Master di eseguire tutte le riparazioni.
Un Master deve essere operativo prima di poter eseguire comandi HBCK2. HBCK1 ha eseguito l'analisi e segnalato il cluster come buono o negativo, ma HBCK2 è meno presuntuoso. In hbase-2.x, l'operatore determina ciò che deve essere corretto e quindi usa gli strumenti, incluso HBCK2, per eseguire riparazioni.
HBCK2 e HBCK1
HBCK2 è il successore di HBCK, lo strumento di riparazione fornito con hbase-1.x (noto anche come HBCK1). È possibile usare HBCK2 al posto di HBCK1 per eseguire riparazioni su cluster hbase-2.x. HBCK1 non deve essere eseguito su un'installazione hbase-2.x perché potrebbe causare danni. La relativa funzionalità di scrittura (-fix
) è stata rimossa. Può segnalare lo stato di un cluster hbase-2.x, ma le relative valutazioni sono imprecise perché non comprende le operazioni interne di un hbase-2.x.
HBCK2 non funziona come viene usato HBCK1, anche nei casi in cui i comandi sono denominati in modo analogo nelle due versioni.
Ottenere HBCK2
È possibile trovare la versione nella directory di distribuzione HBase. Per altre informazioni, vedere la pagina di download di HBase.
Interfaccia utente master: report HBCK
Una pagina del report HBCK aggiunta al Master nella versione 2.1.6 /hbck.jsp
mostra l'output di due ispezioni eseguite dal Master in un intervallo. Uno è l'output di CatalogJanitor
ogni volta che viene eseguito. Se si trovano sovrapposizioni o spazi vuoti in hbase:meta
, CatalogJanitor
elenca ciò che ha trovato. Un altro processo in background chore
confronta il contenuto del hbase:meta
e del file di sistema. Se viene rilevata un'anomalia, crea una nota nella sezione HBCK report.
Per eseguire CatalogJanitor
, eseguire il comando nella shell hbase: catalogjanitor_run
.
Per eseguire hbck chore
, eseguire il comando nella shell hbase: hbck_chore_run
.
Entrambi i comandi non accettano input.
Eseguire HBCK2
È possibile eseguire il hbck
comando avviandolo tramite lo $HBASE_HOME/bin/hbase
script. Per impostazione predefinita, quando si esegue bin/hbase hbck
, vengono eseguiti gli strumenti HBCK1 predefiniti. Per eseguire HBCK2, è necessario puntare a un file JAR HBCK2 compilato usando l'opzione -j
, come in questo esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar
Questo comando stampa la Guida HBCK2, senza tralasciare opzioni o argomenti.
Comandi HBCK2
Nota
Testare questi comandi in un cluster di test per comprendere le funzionalità prima di eseguirle in un ambiente di produzione.
assigns [OPTIONS] <ENCODED_REGIONNAME/INPUTFILES_FOR_REGIONNAMES>... | -i <INPUT_FILE>...
Opzioni:
-o,--override
: esegue l'override della proprietà da un'altra procedura.-i,--inputFiles
: accetta uno o più nomi di area codificati.
Questa assegnazione raw
può essere usata anche durante l'inizializzazione del Master (se il flag -skip
è specificato). Si allontana dai coprocessori e oltrepassa uno o più nomi di area codificati. de00010733901a05f5a2a3a382e27dd4
è un esempio dell'aspetto di un nome di area codificato nello spazio utente. Ad esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns de00010733901a05f5a2a3a382e27dd4
Restituisce i PID dell'oggetto creato AssignProcedures
o -1 se non presente. Se -i or --inputFiles
viene specificato, oltrepassa uno o più nomi di file di input. Ogni file contiene nomi di area codificati, uno per riga. Ad esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -i fileName1 fileName2
unassigns [OPTIONS] <ENCODED_REGIONNAME>...| -i <INPUT_FILE>...
Opzioni:
-o,--override
: esegue l'override della proprietà da un'altra procedura.-i,--inputFiles
: accetta uno o più file di input di nomi codificati.
Questa non assegnazione raw
può essere usata anche durante l'inizializzazione master (se il flag -skip
è specificato). Si allontana dai coprocessori e oltrepassa uno o più nomi di area codificati. de00010733901a05f5a2a3a382e27dd4
è un esempio dell'aspetto del nome dell'area codificata dello spazio sottoposto a override da parte di un utente. Ad esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassign de00010733901a05f5a2a3a382e27dd4
Restituisce i PID dell'oggetto creato UnassignProcedures
o -1 se non presente. Se -i or --inputFiles
viene specificato, oltrepassa uno o più nomi di file di input. Ogni file contiene nomi di area codificati, uno per riga. Ad esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassigns fileName1 -i fileName2
bypass [OPTIONS] <PID>...
Opzioni:
-o,--override
: esegue l'override se la procedura è in esecuzione o bloccata.-r,--recursive
: ignora l'elemento padre e i relativi elementi figlio. Questa opzione è lenta e costosa.-w,--lockWait
: attende millisecondi prima di rinunciare. Valore predefinito=1.-i,--inputFiles
: accetta uno o più file di input di PID.
Oltrepassa una o più procedure PID di routine per arrivare al completamento della procedura. L'elemento padre della procedura ignorata arriva al completamento. Le entità vengono lasciate in uno stato incoerente e richiedono un ripristino manuale. Potrebbe essere necessario un riavvio Master per cancellare i blocchi ancora mantenuti. Il bypass ha esito negativo se la procedura include elementi figlio. Aggiungere recursive
se si ha soltanto un PID padre per completare l'elemento padre e gli elementi figlio. Questa opzione è lenta e pericolosa, quindi usarla in modo selettivo. Non sempre va a buon fine.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass <PID>
Se -i or --inputFiles
viene specificato, oltrepassare uno o più nomi di file di input. Ogni file contiene PID, uno per riga. Ad esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass -i fileName1 fileName2
reportMissingRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...
Opzione:
i,--inputFiles
: richiede uno o più file di input con nomi di spazi o tabelle.
Usare questa opzione quando le aree non sono presenti hbase:meta
, ma quando le directory sono ancora presenti in HDFS. Questo comando è solo un metodo di controllo. È progettato per la creazione di report e non esegue correzioni. Fornisce una visualizzazione delle aree (se presenti) che verrebbero riaggiunte in hbase:meta
, raggruppate in base alla rispettiva tabella o spazio dei nomi.
Per leggere efficacemente le aree in meta, eseguire addFsRegionsMissingInMeta
. Questo comando deve hbase:meta
essere online. Per ogni spazio dei nomi/tabella oltrepassata come parametro, esegue una differenza tra le aree disponibili in hbase:meta
rispetto alle directory delle aree esistenti in HDFS. Le directory dell'area senza corrispondenze vengono stampati raggruppati sotto il nome della tabella correlato. Le tabelle senza aree mancanti mostrano il messaggio: "nessuna area mancante". Se non viene specificato nessuno spazio dei nomi o tabella, verifica tutte le aree esistenti.
Accetta una combinazione di più spazi dei nomi e tabelle. I nomi delle tabelle devono includere la parte dello spazio dei nomi, anche per le tabelle nello spazio dei nomi predefinito. In caso contrario, assume un valore dello spazio dei nomi. Questo esempio attiva i report delle aree mancanti per le tabelle table_1
e table_2
, in uno spazio dei nomi predefinito:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta default:table_1 default:table_2
Questo esempio attiva un report delle aree mancanti per la tabella table_1
con uno spazio dei nomi predefinito e per tutte le tabelle con lo spazio dei nomi ns1
:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta default:table_1 ns1
Restituisce un elenco di aree mancanti per ogni tabella oltrepassata come parametro o per ogni tabella con spazi dei nomi specificati come parametro. Se -i or --inputFiles
viene specificato, oltrepassa uno o più nomi di file di input. Ogni file contiene <NAMESPACE|NAMESPACE:TABLENAME>
, uno per riga. Ad esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar reportMissingRegionsInMeta -i fileName1 fileName2
addFsRegionsMissingInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...
Opzione:
-i,--inputFiles
: accetta uno o più file di input di nomi di tabelle con spazio dei nomi da usare quando mancano le aree inhbase:meta
, ma le directory sono ancora presenti in HDFS. Devehbase:meta
essere online.
Per ogni nome di tabella oltrepassato come parametro, esegue un diff tra le aree disponibili in hbase:meta
e le aree directory in HDFS. Quindi, per le directory senza corrispondenze hbase:meta
, legge il file di metadati regioninfo
e ricrea un'area specifica in hbase:meta
. Le aree vengono ricreate nello stato CLOSED della tabella hbase:meta
, ma non nella cache Masters
. Neanche queste vengono assegnate. Per ottenere queste aree online, eseguire il comando HBCK2 assigns
stampato al termine dell'esecuzione del comando.
Se si usano versioni hbase precedenti alla 2.3.0, è necessario un riavvio in sequenza di HMasters prima di eseguire il set di output assigns
. In questo esempio vengono aggiunte aree mancanti per le tabelle tbl_1
nello spazio dei nomi predefinito, tbl_2
nello spazio dei nomi n1
e per tutte le tabelle dello spazio dei nomi n2
:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2
Restituisce HBCK2 e un comando assigns
con tutte le aree reinserite. Se -i or --inputFiles
viene specificato, oltrepassa uno o più nomi di file di input. Ogni file contiene <NAMESPACE|NAMESPACE:TABLENAME>
, uno per riga. Ad esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta -i fileName1 fileName2
extraRegionsInMeta <NAMESPACE|NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...
Opzioni:
-f, --fix
: corregge il meta rimuovendo tutte le aree aggiuntive trovate.-i,--inputFiles
: richiede uno o più file di input con nomi di spazi o tabelle.
Segnala le aree presenti in hbase:meta
ma senza directory correlate nel file system. Deve hbase:meta
essere online. Per ogni nome di tabella oltrepassato come parametro, esegue differenze tra le aree disponibili in hbase:meta
e le aree directory nel file system specifico. Le aree aggiuntive vengono eliminate da meta se ha oltrepassato l'opzione --fix
.
Nota
Prima di decidere di usare l'opzione --fix
, è consigliabile verificare se le aree aggiuntive segnalate si sovrappongono alle aree valide esistenti. In tal caso, extraRegionsInMeta --fix
è la soluzione ottimale. In caso contrario, il comando assigns
è la soluzione più semplice. Ricrea le directory delle aree nel file system, se non esistono.
In questo esempio vengono attivati report di aree aggiuntive per table_1
nello spazio dei nomi predefinito e per tutte le tabelle dello spazio dei nomi ns1
:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta default:table_1 ns1
In questo esempio vengono attivati report di aree aggiuntive per table_1
nello spazio dei nomi predefinito e per tutte le tabelle dello spazio dei nomi ns1
con l'opzione correzione:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta -f default:table_1 ns1
Restituisce un elenco di aree aggiuntive per ogni tabella passata come parametro o per ogni tabella in spazi dei nomi specificati come parametro. Se -i or --inputFiles
viene specificato, oltrepassare uno o più nomi di file di input. Ogni file contiene <NAMESPACE|NAMESPACE:TABLENAME>
, uno per riga. Ad esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar extraRegionsInMeta -i fileName1 fileName2
fixMeta
Nota
Questa opzione non funziona correttamente con HBase 2.1.6. Non è consigliabile usarlo in un cluster HBase 2.1.6.
Eseguire una correzione lato server di stato non valido o incoerente in hbase:meta
. L'interfaccia utente master ha una nuova scheda corrispondente HBCK Report
che esegue il dump dei report generati dall'esecuzione più recente di catalogjanitor
e di un nuovo hbck chore
.
È fondamentale che hbase:meta
sia prima di tutto reso integro prima di fare qualsiasi altra riparazione. Corregge holes
e overlaps
, creando directory di aree (vuote) in HDFS in modo che corrispondano alle aree aggiunte a hbase:meta
.
Questo comando non è uguale al vecchio comando hbck1 denominato in modo analogo. Funziona con i report generati dall'ultima esecuzione catalog_janitor
e hbck chore
. Se non c'è nulla da correggere, l'esecuzione è un loop. In caso contrario, se l'HBCK Report
interfaccia utente segnala problemi, l'esecuzione di fixMeta
li elimina hbase:meta
.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar fixMeta
generateMissingTableDescriptorFile <NAMESPACE:TABLENAME>
Questo comando tenta di correggere una tabella orfana generando un file descrittore di tabella mancante. Questo comando non ha nessun effetto se la cartella della tabella è mancante o se .tableinfo
è presente. (Non viene eseguito l'override dei descrittori di tabella esistenti.) Questo comando controlla innanzitutto se TableDescriptor
è memorizzato nella cache in HBase Master, nel qual caso viene ripristinato .tableinfo
di conseguenza. Se TableDescriptor
non è memorizzato nella cache in master, crea un file predefinito .tableinfo
con gli elementi seguenti:
- Il nome della tabella.
- Elenco di famiglie di colonne determinato in base al file system.
- Proprietà predefinite sia per
TableDescriptor
cheColumnFamilyDescriptors
. Se il file.tableinfo
è stato generato usando i parametri predefiniti, accertarsi di controllare le proprietà della tabella o della famiglia di colonne in un secondo momento. (Se necessario, modificarli.) Questo metodo non cambia nulla in HBase. Scrive solo il nuovo file.tableinfo
nel file system. Per le tabelle orfane, come ad esempioServerCrashProcedures
, per mantenere la chiave, potrebbe essere necessario correggere l'errore dopo aver generato i file di informazioni sulla tabella mancanti.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar generateMissingTableDescriptorFile namespace:table_name
replication [OPTIONS] [<NAMESPACE:TABLENAME>... | -i <INPUT_FILE>...]
Opzioni:
-f, --fix
: risolve eventuali problemi di replica rilevati.-i,--inputFiles
: accetta uno o più file di input di nomi di tabella.
Cerca le code di replica non eliminate e le elimina se ha oltrepassato l'opzione --fix
. Oltrepassa un nome di tabella per verificare la presenza di una barriera di replica ed eliminare se --fix
.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication namespace:table_name
Se -i or --inputFiles
viene specificato, oltrepassa uno o più nomi di file di input. Ogni file contiene <TABLENAME>
, uno per riga. Ad esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication -i fileName1 fileName2
setRegionState [<ENCODED_REGIONNAME> <STATE> | -i <INPUT_FILE>...]
Opzione:
-i,--inputFiles
: accetta uno o più file di input di nomi e stati di area codificati.
Possibili stati dell'area:
- OFFLINE
- OPENING
- OPEN
- CLOSING
- CLOSED
- SPLITTING
- SPLIT
- FAILED_OPEN
- FAILED_CLOSE
- MERGING
- MERGED
- SPLITTING_NEW
- MERGING_NEW
- ABNORMALLY_CLOSED
Avviso
Questa opzione rischiosa è destinata all'uso solo come ultima risorsa.
Gli scenari di esempio includono assegnazioni o non assegnazioni che non possono essere mandate avanti perché l'area si trova in uno stato incoerente in hbase:meta
. Ad esempio, il unassigns
comando può continuare solo se viene oltrepassata un'area in uno degli stati seguenti: SPLITTING, SPLIT, MERGE, OPEN o CLOSING.
Prima di impostare manualmente lo stato di un'area con questo comando, certificare che questa area non è gestita da una procedura in esecuzione, come ad esempio assign
o split
. È possibile ottenere una visualizzazione delle procedure in esecuzione nella shell hbase usando il comando list_procedures
. In questo esempio l'area viene impostata de00010733901a05f5a2a3a382e27dd4
su CLOSING:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState de00010733901a05f5a2a3a382e27dd4 CLOSING
Restituisce 0
se lo stato dell'area è cambiato e 1
in caso contrario. Se -i or --inputFiles
viene specificato, oltrepassare uno o più nomi di file di input. Ogni file contiene <ENCODED_REGIONNAME> <STATE>
, una coppia per riga. Ad esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState -i fileName1 fileName2
setTableState [<TABLENAME> <STATE> | -i <INPUT_FILE>...]
Opzione:
-i,--inputFiles
: accetta uno o più file di input di nomi e stati di tabella.
I possibili stati di tabella sono ENABLED, DISABLED, DISABLEING e ENABLING.
Per leggere lo stato della tabella corrente, eseguire nella shell hbase:
hbase> get 'hbase:meta', '<TABLENAME>', 'table:state'
Valore x08x00 == ENABLED, x08x01 == DISABLED e così via. Può anche essere eseguito describe <TABLENAME>
al prompt della shell. Questo esempio rende l'utente del nome di tabella ENABLED:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState users ENABLED
Restituisce qualsiasi stato della tabella precedente. Se -i or --inputFiles
viene specificato, oltrepassa uno o più nomi di file di input. Ogni file contiene <TABLENAME> <STATE>
, una coppia per riga. Ad esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState -i fileName1 fileName2
scheduleRecoveries <SERVERNAME>... | -i <INPUT_FILE>...
Opzione:
-i,--inputFiles
: richiede uno o più file di input dei nomi dei server.
Pianificare ServerCrashProcedure(SCP)
per un elenco di RegionServers
. Formattare il nome del server come <HOSTNAME>,<PORT>,<STARTCODE>
. (Vedere interfaccia utente/log di HBase.)
Questo esempio usa RegionServer
a.example.org, 29100,1540348649479
:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries a.example.org,29100,1540348649479
Restituisce i PID dell'oggetto creato ServerCrashProcedures
o -1 se non viene creata nessuna procedura. (Per il motivo per cui non lo fa, vedere Log master.) Il supporto dei comandi viene aggiunto in HBase versioni 2.0.3, 2.1.2, 2.2.0 o successive. Se -i or --inputFiles
viene specificato, oltrepassa uno o più nomi di file di input. Ogni file contiene <SERVERNAME>
, uno per riga. Ad esempio:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries -i fileName1 fileName2
Risolvere i problemi
Questa sezione consente di risolvere i problemi comuni.
Principi generali
Quando si esegue un ripristino, accertarsi che hbase:meta
sia coerente prima di risolvere qualsiasi altro tipo di problema, come ad esempio una devianza del file system. La devianza nel file system o i problemi di assegnazione devono essere risolti dopo l'inserimento in ordine di hbase:meta
. Se hbase:meta
ha problemi, il master non può effettuare posizionamenti appropriati quando adotta i dati orfani del file system o effettua assegnazioni di area.
Non è possibile assegnare un'area se si trova nello stato CLOSING (o al contrario, non assegnarla se è nello stato OPENING) senza prima eseguire la transizione attraverso CLOSED. Le aree devono sempre passare da CLOSED, a OPENING, a OPEN e poi a CLOSING e CLOSED.
Quando si esegue una riparazione, correggere le tabelle una alla volta.
Se una tabella è DISABLED, non è possibile assegnare un'area. Nei log master si noterà che i report master sono ignorati perché la tabella è DISABLED. È possibile assegnare un'area se è attualmente nello stato OPENING e la si desidera nello stato CLOSED in modo che accetti lo stato DISABLED. In questo caso, potrebbe essere necessario impostare temporaneamente lo stato della tabella su ENABLED in modo da poter eseguire l'assegnazione. Viene quindi nuovamente impostata dopo l'istruzione di non assegnazione. HBCK2 ha la funzionalità per consentire di eseguire questa modifica. Vedere l'output di utilizzo di HBCK2.
Assegnare e non assegnare
In genere, al termine dell'assegnazione, il master persiste fino a quando non riesce. Un'assegnazione accetta un blocco esclusivo nell'area. Il blocco impedisce l'esecuzione di un'assegnazione o l'annullamento di un'assegnazione simultaneamente. Un'assegnazione, di fronte un'area bloccata, attende il rilascio del blocco prima di eseguire l'avanzamento.
Master startup cannot progress, in holding-pattern until region online
:
2018-10-01 22:07:42,792 WARN org.apache.hadoop.hbase.master.HMaster: hbase:meta,1.1588230740 isn't online; state={1588230740 state=CLOSING, ts=1538456302300, server=ve1017.example.org,22101,1538449648131}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region online.
Il master non è in grado di continuare l'avvio perché non esiste nessuna procedura da assegnare hbase:meta
(o hbase:namespace
). Per inserire uno, usare lo strumento HBCK2:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -skip 1588230740
In questo esempio, 1588230740 è il nome codificato dell'area hbase:meta
. Passare l'opzione -skip
per impedire a HBCK2 di eseguire un controllo della versione sul master remoto. Se il master remoto non è aggiornato, il controllo della versione richiede un Master is initializing response
o PleaseHoldException
e abbandona il tentativo di assegnazione. Il comando -skip
evita il controllo della versione e assegna l'assegnazione pianificata.
Lo stesso può verificarsi nella tabella di sistema hbase:namespace
. Cercare il nome dell'area codificata dell'area hbase:namespace
ed eseguire passaggi simili a quanto fatto per hbase:meta
. In questo secondo caso, il master stampa effettivamente un messaggio utile simile all'esempio seguente:
2019-07-09 22:08:38,966 WARN [master/localhost:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1562733904278.9559cf72b8e81e1291c626a8e781a6ae. isn't online; state={9559cf72b8e81e1291c626a8e781a6ae state=CLOSED, ts=1562735318897, server=null}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined.
Per pianificare un'assegnazione per la hbase:namespace
tabella annotata nella riga di log precedente:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 9559cf72b8e81e1291c626a8e781a6ae
Passare il nome codificato per l'area dello spazio dei nomi. (Il nome codificato differisce per ogni distribuzione.)
Aree mancanti in hbase:meta region/table restore/rebuild
Alcuni casi insoliti presentavano aree di tabella rimosse dalla hbase:meta
tabella. Il triage su questi casi ha rivelato che sono stati indotti dall'operatore. Gli utenti hanno eseguito lo strumento obsoleto HBCK1 OfflineMetaRepair su un cluster HBCK2. OfflineMetaRepair è uno strumento noto per risolvere i hbase:meta
problemi relativi alle tabelle nelle versioni di HBase 1.x. La versione originale non è compatibile con HBase 2.x o versioni successive e ha subito alcune modifiche. In situazioni estreme, adesso può essere eseguito tramite HBCK2.
Nella maggior parte di questi casi, le aree finiscono per mancare in hbase:meta
modo casuale, ma hbase potrebbe essere ancora operativo. In tali situazioni, il problema può essere risolto con il master online usando il addFsRegionsMissingInMeta
comando in HBCK2. Questo comando è meno problematico per hbase rispetto a una ricompilazione completa hbase:meta
, descritta in un secondo momento. Può essere usato anche per ripristinare l'area della tabella dello spazio dei nomi.
Aree aggiuntive in hbase:meta region/table restore/rebuild
Possono anche verificarsi situazioni in cui le aree della tabella sono state rimosse nel file system ma hanno ancora voci correlate nella tabella hbase:meta
. Questo scenario può verificarsi a causa di problemi durante la suddivisione, errori di operazioni manuali (come ad esempio l'eliminazione o lo spostamento manuale dell'area directory) o anche problemi di perdita di dati meta info, come ad esempio HBASE-21843.
Questi problemi possono essere risolti con il master online usando il extraRegionsInMeta --fix
comando in HBCK2. Questo comando è meno problematico per hbase rispetto a una ricompilazione completa hbase:meta
, descritta in un secondo momento. È utile anche quando ciò si verifica nelle versioni che non supportano l'opzione fixMeta
HBCK2 (qualsiasi versione precedente alla versione 2.0.6, 2.1.6, 2.2.1, 2.3.0 o 3.0.0).
Ricetta hbase:meta rebuild online
Se hbase:meta
il danneggiamento non è troppo critico, hbase può comunque portarlo online. Anche se l'area dello spazio dei nomi è tra le aree mancanti, è possibile eseguire l'analisi hbase:meta
durante il periodo di inizializzazione, in cui master è in attesa dell'assegnazione dello spazio dei nomi. Per verificare questa situazione, è possibile eseguire un hbase:meta
comando di analisi. Se non si verifica il timeout o viene visualizzato alcun errore, hbase:meta
è online:
echo "scan 'hbase:meta', {COLUMN=>'info:regioninfo'}" | hbase shell
HBCK2 addFsRegionsMissingInMeta
può essere usato se il messaggio non mostra errori. Legge le informazioni sui metadati dell'area disponibili nelle directory dell'area FS per ricreare le aree in hbase:meta
. Poiché può essere eseguito con hbase parzialmente operativo, tenta di disabilitare le tabelle online interessate dal problema segnalato e le aree saranno reinserite in hbase:meta
. Può verificare la presenza di tabelle o spazi dei nomi specifici o di tutte le tabelle di tutti gli spazi dei nomi. Questo esempio mostra l'aggiunta di aree mancanti per le tabelle tbl_1
nello spazio dei nomi predefinito, tbl_2
nello spazio dei nomi n1
e per tutte le tabelle dello spazio dei nomi n2
:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar addFsRegionsMissingInMeta default:tbl_1 n1:tbl_2 n2
Poiché funziona in modo indipendente dal master, dopo che è stato completato con successo, sono necessari altri passaggi per reinserire le aree assegnate. Questi messaggi sono elencati di seguito:
addFsRegionsMissingInMeta
emette un comando di assegnazione con tutte le aree che sono state reinserite. Questo comando deve essere eseguito in un secondo momento, quindi copiarlo e salvarlo per praticità.- Per le versioni di HBase precedenti alla 2.3.0, dopo che
addFsRegionsMissingInMeta
l'operazione è stata completata e l'output è stato salvato, riavviare tutti i master HBase in esecuzione.
Dopo che i master sono stati riavviati e hbase:meta
è già online (controllare se l'interfaccia utente Web è accessibile), eseguire il comando assegnazione dall'output addFsRegionsMissingInMeta
salvato in precedenza.
Nota
Se l'area dello spazio dei nomi è tra le aree mancanti, è necessario aggiungere il flag --skip
all'inizio del comando di assegnazione restituito.
Se un cluster subisce una perdita irreversibile della tabella hbase:meta
, è possibile eseguire una ricompilazione approssimativa usando la ricetta seguente. Nella struttura si arresta il cluster. Eseguire lo strumento HBCK2 OfflineMetaRepair, che legge le directory e i metadati rilasciati nel file system e fa il massimo sforzo per ricostruire una tabella hbase:met
valida. Riavviare il cluster. Inserire un'assegnazione per portare online la tabella dello spazio dei nomi di sistema. Infine, riassegnare le tabelle dello spazio utente da abilitare. (La ricompilazione hbase:meta
crea una tabella con tutte le tabelle offline e nessuna area assegnata.)
Ricetta dettagliata per la ricompilazione
Nota
Utilizzare questa opzione solo come ultima risorsa. Non è una scelta consigliata.
Arrestare il cluster.
Eseguire il comando
hbase:meta
ricompilazione da HBCK2. Questo comando si affianca all'originalehbase:meta
e mette in atto una nuova ricompilazione. In questo esempio viene illustrato come eseguire lo strumento. Aggiunge il flag-details
in modo che lo strumento esegue il dump delle informazioni sulle aree trovate in HDFS:hbase --config /etc/hbase/conf -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar org.apache.hbase.hbck1.OfflineMetaRepair -details
Avviare il cluster. Non si avvia completamente. È bloccato perché la tabella dello spazio dei nomi non è online e non esiste alcuna procedura di assegnazione nell'archivio delle procedure per questa emergenza. Il log master di HBase mostra questo stato. Questo esempio mostra i log:
2019-07-10 18:30:51,090 WARN [master/localhost:16000:becomeActiveMaster] master.HMaster: hbase:namespace,,1562808216225.725a0fe6c2c869d3d0a9ed82bfa80fa3. isn't online; state={725a0fe6c2c869d3d0a9ed82bfa80fa3 state=CLOSED, ts=1562808619952, server=null}; ServerCrashProcedures=false. Master startup can't progress, in holding-pattern until region onlined.
Per assegnare l'area della tabella dello spazio dei nomi, non è possibile usare la shell. Se si usa la shell, l'operazione ha esito negativo
PleaseHoldException
perché il master non è ancora attivo. (È in attesa che la tabella dello spazio dei nomi venga online prima di dichiararsi "up".) È necessario usare il comando HBCK2 assegnazione. Per assegnare, è necessario il nome codificato dello spazio dei nomi. Viene visualizzato nel log racchiuso tra virgolette. In questo caso, è725a0fe6c2c869d3d0a9ed82bfa80fa3
. È necessario passare il-skip
comando per ignorare il controllo della versione master. (Senza di esso, la chiamata HBCK2 generaPleaseHoldException
perché il master non è ancora in funzione.) In questo esempio viene aggiunta un'assegnazione della tabella dello spazio dei nomi:hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
Se la chiamata torna con
Connection refused
, si tratta del master? Il master si arresta dopo un po' se non è in grado di inizializzare se stesso. Riavviare il cluster/master ed eseguire di nuovo il comando assegnazione.Quando l'esecuzione dell'oggetto viene eseguita correttamente, viene visualizzata un'operazione simile all'esempio seguente. Alla
48
fine è il PID della pianificazione della procedura di assegnazione. Se il PID restituito è-1
, l'avvio del master non è sufficientemente progredito, quindi riprovare. In alternativa, il nome dell'area codificata potrebbe non essere corretto, quindi verificare questo problema.hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
18:40:43.817 [main] WARN org.apache.hadoop.util.NativeCodeLoader - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 18:40:44.315 [main] INFO org.apache.hbase.HBCK2 - hbck sufpport check skipped [48]
Controllare i log master. Il master dovrebbe essere visualizzato. Viene visualizzato il completamento corretto di PID=48. Cercare una riga simile a questo esempio per verificare un avvio master andato a buon fine:
master.HMaster: Master has completed initialization 132.515sec
Potrebbe essere necessario un po' di tempo.
La ricompilazione di
hbase:meta
aggiunge le tabelle utente in stato DISABLED e le aree in modalità CLOSED. Riabilitare le tabelle tramite la shell per riportare online tutte le aree di tabella. Eseguire questa operazione una alla volta o visualizzare il comando enable all ".*" per abilitare tutte le tabelle contemporaneamente.La meta di ricompilazione non contiene modifiche e potrebbe richiedere la riparazione e la pulizia successive usando la struttura descritta in precedenza in questo articolo.
File di riferimento eliminati, file hbase.version mancanti e file danneggiati
HBCK2 può verificare la presenza di riferimenti sospesi e di file danneggiati. È possibile chiedergli di allineare i file danneggiati, che potrebbero essere necessari per superare le difficoltà in cui le aree non vanno online o le letture hanno esito negativo. Vedere il comando file system nell'elenco HBCK2. Oltrepassare uno o più nomi di tabella (o usare none
per controllare tutte le tabelle). Vengono segnalati file non validi. Oltrepassare l'opzione --fix
per effettuare riparazioni.
Riavvio della procedura
Come ultima risorsa, se il master è in difficoltà e tutti i tentativi di riparazione portano solo a blocchi o procedure inutilizzabili che non possono terminare o se il set di MasterProcWALs
è in crescita senza limiti, è possibile ripulire lo stato del master. Spostare la directory /hbase/MasterProcWALs/
nell'installazione di HBase e riavviare il processo master. Viene restituito come formato tabulare senza memoria.
Se al momento della cancellazione tutte le aree sono state assegnate o offline, al riavvio del master, questo deve riprendere a funzionare come se non fosse successo nulla. Tuttavia, se al momento sono presenti aree in transizione, l'operatore deve intervenire per portare assegnazioni in sospeso o non assegnate al punto terminale.
Leggere le colonne hbase:meta
info:state
come descritto per determinare quali elementi devono essere assegnati o non assegnati. Dopo che tutta la cronologia viene cancellata spostando da un lato MasterProcWALs
, nessuna delle entità deve essere bloccata, quindi è possibile assegnare o non assegnare in blocco.