Verwenden des Apache HBase HBCK2-Tools
Dieser Artikel beschreibt, wie Sie das HBase HBCK2-Tool verwenden. HBCK2 ist das Reparaturtool für Apache HBase-Cluster.
HBCK2 – Übersicht
HBCK2 ist derzeit ein einfaches Tool, das nur eine Sache nach der anderen erledigt. In hbase-2.x ist der Master der endgültige Arbiter aller Zustände, so dass ein allgemeines Prinzip für die meisten HBCK2-Befehle ist, dass sie den Master auffordern, alle Reparaturen durchzuführen.
Ein Master muss ausgeführt werden, bevor Sie HBCK2-Befehle ausführen können. HBCK1 hat eine Analyse durchgeführt und Ihren Cluster als gut oder schlecht gemeldet, aber HBCK2 ist weniger anmaßend. In hbase-2.x bestimmt der Operator, was behoben werden muss, und verwendet dann Tools, einschließlich HBCK2, um Reparaturen durchzuführen.
HBCK2 vs. HBCK1
HBCK2 ist der Nachfolger von HBCK, dem Reparaturtool, das mit hbase-1.x (auch bekannt als HBCK1) ausgeliefert wurde. Sie können HBCK2 anstelle von HBCK1 verwenden, um Reparaturen an hbase-2.x-Clustern durchzuführen. HBCK1 sollte nicht für eine hbase-2.x-Installation ausgeführt werden, da dies möglicherweise Schaden anrichten kann. Die Schreibfunktion (-fix
) wurde entfernt. Es kann den Status eines hbase-2.x-Clusters melden, seine Bewertungen sind jedoch ungenau, da es die internen Funktionsweisen einer hbase-2.x nicht versteht.
HBCK2 funktioniert nicht so wie HBCK1, auch wenn die Befehle in den beiden Versionen ähnlich benannt sind.
Abrufen HBCK2
Sie finden das Release im HBase-Verteilungsverzeichnis. Weitere Informationen finden Sie auf der HBase-Downloadseite.
Master-Benutzeroberfläche: Der HBCK-Bericht
Eine HBCK-Berichtsseite, die dem Master in Version 2.1.6 unter /hbck.jsp
hinzugefügt wurde, auf der die Ausgabe von zwei Inspektionen angezeigt wird, die vom Master in einem Intervall ausgeführt werden. Die eine ist die Ausgabe von CatalogJanitor
, wenn es läuft. Bei Überschneidungen oder Löchern in hbase:meta
listet das CatalogJanitor
auf, was es gefunden hat. Ein weiterer Hintergrundprozess chore
vergleicht das hbase:meta
und den Inhalt des Dateisystems. Wenn eine Anomalie gefunden wird, wird sie im HBCK-Berichtabschnitt notiert.
Um CatalogJanitor
auszuführen, führen Sie den Befehl in der hbase-Shell aus: catalogjanitor_run
.
Um hbck chore
auszuführen, führen Sie den Befehl in der hbase-Shell aus: hbck_chore_run
.
Beide Befehle nehmen keine Eingaben an.
Run HBCK2
Sie können den Befehl hbck
ausführen, indem Sie ihn über das $HBASE_HOME/bin/hbase
-Skript starten. Wenn Sie bin/hbase hbck
ausführen, wird standardmäßig das integrierte HBCK1-Tool ausgeführt. Um HBCK2 auszuführen, müssen Sie auf eine erstellte HBCK2-JAR-Datei verweisen, indem Sie die Option -j
wie in diesem Beispiel verwenden:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar
Mit diesem Befehl wird die HBCK2-Hilfe ausgegeben, ohne Optionen oder Argumente zu übergeben.
HBCK2-Befehle
Hinweis
Testen Sie diese Befehle in einem Testcluster, um die Funktionalität zu verstehen, bevor sie in der Produktionsumgebung ausgeführt werden.
assigns [OPTIONS] <ENCODED_REGIONNAME/INPUTFILES_FOR_REGIONNAMES>... | -i <INPUT_FILE>...
Optionen:
-o,--override
: Überschreibt das Eigentum durch eine andere Prozedur.-i,--inputFiles
: Nimmt einen oder mehrere codierte Regionsnamen an.
Diese raw
-Zuweisung kann auch während der Masterinitialisierung verwendet werden (wenn das Flag -skip
angegeben ist). Es übergeht Coprozessoren und übergibt einen oder mehrere codierte Regionsnamen. de00010733901a05f5a2a3a382e27dd4
ist ein Beispiel dafür, wie ein im Benutzerraum kodierter Regionsname aussieht. Beispiel:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns de00010733901a05f5a2a3a382e27dd4
Es gibt die PIDs der erstellten AssignProcedures
oder -1 zurück, falls keine vorhanden sind. Wenn -i or --inputFiles
angegeben ist, übergibt es einen oder mehrere Eingabedateinamen. Jede Datei enthält codierte Regionsnamen, einen pro Zeile. Beispiel:
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>...
Optionen:
-o,--override
: Überschreibt das Eigentum durch eine andere Prozedur.-i,--inputFiles
: Akzeptiert eine oder mehrere Eingabedateien mit codierten Namen.
Diese raw
-Zuweisungsaufhebung kann auch während der Masterinitialisierung verwendet werden (wenn das Flag -skip
angegeben ist). Es übergeht Coprozessoren und übergibt einen oder mehrere codierte Regionsnamen. de00010733901a05f5a2a3a382e27dd4
ist ein Beispiel dafür, wie ein im Benutzerüberschreibenraum kodierter Regionsname aussieht. Beispiel:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar unassign de00010733901a05f5a2a3a382e27dd4
Es gibt die PIDs der erstellten UnassignProcedures
oder -1 zurück, falls keine vorhanden sind. Wenn -i or --inputFiles
angegeben ist, übergibt es einen oder mehrere Eingabedateinamen. Jede Datei enthält codierte Regionsnamen, einen pro Zeile. Beispiel:
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>...
Optionen:
-o,--override
: Überschreibt, wenn die Prozedur ausgeführt wird oder hängen bleibt.-r,--recursive
: Umgeht das übergeordnete Element und die untergeordneten Elemente. Diese Option ist langsam und teuer.-w,--lockWait
: Wartet Millisekunden und gibt dann auf. Default=1.-i,--inputFiles
: nimmt eine oder mehrere Eingabedateien von PIDs an.
Es übergibt eine (oder mehrere) Prozedur-PIDs, um zum Abschluss der Prozedur zu springen. Das übergeordnete Element der umgangenen Prozedur springt zum Ende. Entitäten bleiben in einem inkonsistenten Status und erfordern eine manuelle Reparatur. Möglicherweise ist ein Masterneustart erforderlich, um weiterhin gehaltene Sperren zu löschen. Die Umgehung schlägt fehl, wenn die Prozedur über untergeordnete Elemente verfügt. Fügen Sie recursive
hinzu, wenn Sie nur über eine übergeordnete PID verfügen, um übergeordnete und untergeordnete Elemente abzuschließen. Diese Option ist langsam und gefährlich, weshalb sie selektiv verwendet werden sollte. Sie funktioniert nicht immer..
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar bypass <PID>
Wenn -i or --inputFiles
angegeben ist, übergeben Sie einen oder mehrere Eingabedateinamen. Jede Datei enthält PIDs, eine pro Zeile. Beispiel:
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>...
Option:
i,--inputFiles
: Akzeptiert eine oder mehrere Eingabedateien mit Namespace- oder Tabellennamen.
Verwenden Sie diese Option, wenn Regionen in hbase:meta
fehlen, aber in HDFS noch Verzeichnisse vorhanden sind. Dieser Befehl ist nur eine Überprüfungsmethode. Er ist für Berichterstellungszwecke konzipiert und führt keine Korrekturen aus. Er bietet eine Ansicht, welche Regionen (falls vorhanden) in hbase:meta
gelesen werden, gruppiert nach der jeweiligen Tabelle oder dem jeweiligen Namespace.
Führen Sie addFsRegionsMissingInMeta
aus, um Regionen in meta effektiv zu lesen. Für diesen Befehl muss hbase:meta
online sein. Für jede/n als Parameter übergebene/n Namespace/Tabelle wird ein Vergleich zwischen den in hbase:meta
verfügbaren Regionen und den vorhandenen Regionsverzeichnissen im HDFS durchgeführt. Regionsverzeichnisse ohne Übereinstimmungen werden gruppiert unter dem zugehörigen Tabellennamen ausgegeben. Tabellen ohne fehlende Regionen zeigen die Meldung „Keine fehlenden Regionen“ an. Wenn kein Namespace oder keine Tabelle angegeben ist, werden alle vorhandenen Regionen überprüft.
Er akzeptiert eine Kombination aus mehreren Namespaces und Tabellen. Tabellennamen sollten auch für Tabellen im Standard-Namespace den Namespace-Teil enthalten. Andernfalls wird ein Namespace-Wert angenommen. In diesem Beispiel werden fehlende Regionsberichte für die Tabellen table_1
und table_2
ausgelöst, die unter einem Standard-Namespace enthalten sind:
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
Dieses Beispiel löst fehlende Regionen für die Tabelle table_1
unter dem Standard-Namespace und für alle Tabellen aus dem Namespace ns1
aus:
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
Es wird eine Liste der fehlenden Regionen für jede als Parameter übergebene Tabelle oder für jede Tabelle in den als Parameter angegebenen Namespaces zurückgegeben. Wenn -i or --inputFiles
angegeben ist, übergibt es einen oder mehrere Eingabedateinamen. Jede Datei enthält <NAMESPACE|NAMESPACE:TABLENAME>
, eins pro Zeile. Beispiel:
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>...
Option:
-i,--inputFiles
: Nimmt eine oder mehrere Eingabedateien mit Namensräumen von Tabellennamen entgegen, die verwendet werden, wenn Regionen inhbase:meta
fehlen, aber Verzeichnisse im HDFS noch vorhanden sind. Dafür musshbase:meta
online sein.
Führt für jeden als Parameter übergebenen Tabellennamen einen Vergleich zwischen den in hbase:meta
verfügbaren Regionen und den Regionenverzeichnissen im HDFS durch. Bei Verzeichnissen ohne hbase:meta
-Treffer wird dann die Metadaten-Datei regioninfo
gelesen und die betreffende Region in hbase:meta
neu erstellt. Regionen werden im Zustand CLOSED in der Tabelle hbase:meta
neu erstellt, jedoch nicht im Masters
-Cache. Sie werden auch nicht zugewiesen. Um diese Regionen online zu schalten, führen Sie den HBCK2-Befehl assigns
aus, der gedruckt wird, wenn diese Befehlsausführung abgeschlossen ist.
Wenn Sie hbase-Releases verwenden, die älter als 2.3.0 sind, ist ein rollierender Neustart von HMasters erforderlich, bevor die Ausgabe assigns
ausgeführt wird. Dieses Beispiel fügt fehlende Regionen für Tabellen tbl_1
im Standard-Namespace, tbl_2
im Namespace n1
und für alle Tabellen aus dem Namespace n2
hinzu:
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
Wird wird HBCK2 und ein Befehl assigns
mit allen erneut eingefügten Regionen zurückgegeben. Wenn -i or --inputFiles
angegeben ist, übergibt es einen oder mehrere Eingabedateinamen. Jede Datei enthält <NAMESPACE|NAMESPACE:TABLENAME>
, eins pro Zeile. Beispiel:
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>...
Optionen:
-f, --fix
: Repariert Meta, indem alle gefundenen zusätzlichen Regionen entfernt werden.-i,--inputFiles
: Akzeptiert eine oder mehrere Eingabedateien mit Namespace- oder Tabellennamen
Es werden Regionen gemeldet, die auf hbase:meta
vorhanden sind, aber keine zugehörigen Verzeichnisse im Dateisystem enthalten. Dafür muss hbase:meta
online sein. Führt für jeden als Parameter übergebenen Tabellennamen einen Vergleich zwischen den in hbase:meta
verfügbaren Regionen und den Regionenverzeichnissen im entsprechenden Dateisystem durch. Zusätzliche Regionen werden aus Meta gelöscht, wenn die Option --fix
übergeben wird.
Hinweis
Bevor Sie sich für die Option --fix
entscheiden, sollten Sie überprüfen, ob sich die gemeldeten zusätzlichen Regionen mit bereits vorhandenen gültigen Regionen überschneiden. Wenn ja, dann ist extraRegionsInMeta --fix
die optimale Lösung. Andernfalls ist der Befehl assigns
die einfachere Lösung. Er erstellt die Verzeichnisse der Regionen im Dateisystem neu, wenn sie nicht vorhanden sind.
In diesem Beispiel werden zusätzliche Regionsberichte für table_1
unter dem Standard-Namespace und für alle Tabellen aus dem Namespace ns1
ausgelöst:
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 diesem Beispiel werden zusätzliche Regionsberichte für table_1
unter dem Standard-Namespace und für alle Tabellen aus dem Namespace ns1
mit der Fehlerbehebungsoption ausgelöst:
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
Es wird eine Liste der zusätzlichen Regionen für jede als Parameter übergebene Tabelle oder für jede Tabelle in den als Parameter angegebenen Namespaces zurückgegeben. Wenn -i or --inputFiles
angegeben ist, übergeben Sie einen oder mehrere Eingabedateinamen. Jede Datei enthält <NAMESPACE|NAMESPACE:TABLENAME>
, eins pro Zeile. Beispiel:
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
Hinweis
Diese Option funktioniert nicht gut mit HBase 2.1.6. Die Verwendung in einem 2.1.6 HBase-Cluster wird nicht empfohlen.
Server-seitige Korrektur von fehlerhaften oder inkonsistenten Zuständen in hbase:meta
. Die Masterbenutzeroberfläche hat eine entsprechende neue Registerkarte HBCK Report
, die von der letzten Ausführung von catalogjanitor
und einem neuen hbck chore
generierte Berichte sichert.
Es ist wichtig, dass hbase:meta
zuerst fehlerfrei ist, bevor sie andere Reparaturen vornehmen. Behebt holes
und overlaps
, indem (leere) Regionsverzeichnisse im HDFS erstellt werden, die zu den in hbase:meta
hinzugefügten Regionen passen.
Dieser Befehl ist nicht mit dem alten hbck1-Befehl identisch, der ähnlich benannt ist. Er arbeitet mit den Berichten, die von den letzten catalog_janitor
- und hbck chore
-Ausführungen generiert wurden. Wenn es nichts zu beheben gibt, ist die Ausführung eine Schleife. Andernfalls, wenn die Benutzeroberfläche HBCK Report
Probleme meldet, werden hbase:meta
-Probleme durch einen Lauf von fixMeta
behoben.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar fixMeta
generateMissingTableDescriptorFile <NAMESPACE:TABLENAME>
Dieser Befehl versucht, eine verwaiste Tabelle zu reparieren, indem eine fehlende Tabellendeskriptor-Datei erzeugt wird. Dieser Befehl ist wirkungslos, wenn der Tabellenordner fehlt oder wenn .tableinfo
vorhanden ist. (Vorhandene Tabellendeskriptoren werden nicht überschrieben.) Mit diesem Befehl wird zunächst überprüft, ob der TableDescriptor
in HBase Master zwischengespeichert ist; in diesem Fall wird das .tableinfo
entsprechend wiederhergestellt. Wenn TableDescriptor
nicht in Master zwischengespeichert ist, wird eine standardmäßige .tableinfo
-Datei mit den folgenden Elementen erstellt:
- Der Tabellenname.
- Die Spaltenfamilienliste, die basierend auf dem Dateisystem bestimmt wird
- Die Standardeigenschaften für
TableDescriptor
undColumnFamilyDescriptors
. Wenn die.tableinfo
-Datei mithilfe von Standardparametern generiert wurde, überprüfen Sie die Tabellen- oder Spaltenfamilieneigenschaften später. (Ändern Sie sie bei Bedarf.) Diese Methode ändert in HBase nichts. Es wird lediglich die neueste.tableinfo
-Datei in das Dateisystem geschrieben. Um verwaiste Tabellen, z. B.ServerCrashProcedures
anzuheften, müssen Sie den Fehler möglicherweise beheben, nachdem Sie die fehlenden Tabelleninfodateien erzeugt haben.
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>...]
Optionen:
-f, --fix
: Behebt alle gefundenen Replikationsprobleme.-i,--inputFiles
: Nimmt eine oder mehrere Eingabedateien mit Tabellennamen.
Sucht nach nicht gelöschten Replikationswarteschlangen und löscht sie, wenn die Option --fix
übergeben wurde. Übergibt einen Tabellennamen zur Überprüfung der Replikationsbarriere und bereinigt ihn, wenn --fix
angegeben ist.
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar replication namespace:table_name
Wenn -i or --inputFiles
angegeben ist, übergibt es einen oder mehrere Eingabedateinamen. Jede Datei enthält <TABLENAME>
, eins pro Zeile. Beispiel:
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>...]
Option:
-i,--inputFiles
: Nimmt eine oder mehrere Eingabedateien mit kodierten Regionsnamen und Zuständen.
Mögliche Regionszustände:
- OFFLINE
- OPENING
- OPEN
- CLOSIN
- CLOSED
- SPLITTING
- SPLIT
- FAILED_OPEN
- FAILED_CLOSE
- MERGING
- MERGED
- SPLITTING_NEW
- MERGING_NEW
- ABNORMALLY_CLOSED
Warnung
Diese riskante Option sollte nur als letztes Mittel verwendet werden.
Zu den Beispielszenarien gehören Aufhebungen oder Zuweisungen, die nicht vorankommen, weil sich die Region in einem inkonsistenten Zustand in hbase:meta
befindet. Zum Beispiel kann der Befehl unassigns
nur ausgeführt werden, wenn eine Region in einem der folgenden Zustände übergeben wird: SPLITTING, SPLIT, MERGING, OPEN oder CLOSING.
Bevor Sie den Zustand einer Region mit diesem Befehl manuell festlegen, vergewissern Sie sich, dass diese Region nicht von einer laufenden Prozedur, wie z. B. assign
oder split
, bearbeitet wird. Eine Übersicht über die laufenden Prozeduren in der hbase-Shell erhalten Sie mit dem Befehl list_procedures
. In diesem Beispiel wird die Region de00010733901a05f5a2a3a382e27dd4
auf CLOSING festgelegt:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setRegionState de00010733901a05f5a2a3a382e27dd4 CLOSING
0
wird zurückgegeben, wenn sich der Regionszustand geändert hat, andernfalls 1
. Wenn -i or --inputFiles
angegeben ist, übergeben Sie einen oder mehrere Eingabedateinamen. Jede Datei enthält <ENCODED_REGIONNAME> <STATE>
, ein Paar pro Zeile. Beispiel:
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>...]
Option:
-i,--inputFiles
: Nimmt eine oder mehrere Eingabedateien mit Tabellennamen und -zuständen.
Mögliche Tabellenzustände sind ENABLED, DISABLED, DISABLING und ENABLING.
Um den aktuellen Tabellenstatus zu lesen, führen Sie in der hbase-Shell Folgendes aus:
hbase> get 'hbase:meta', '<TABLENAME>', 'table:state'
Ein Wert von x08x00 == ENABLED, x08x01 == DISABLED usw. Kann auch describe <TABLENAME>
in der Shell-Eingabeaufforderung ausführen. In diesem Beispiel wird der Tabellennamenbenutzer ENABLED:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar setTableState users ENABLED
Der vorherige Tabellenstatus wird zurückgegeben. Wenn -i or --inputFiles
angegeben ist, übergibt es einen oder mehrere Eingabedateinamen. Jede Datei enthält <TABLENAME> <STATE>
, ein Paar pro Zeile. Beispiel:
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>...
Option:
-i,--inputFiles
: Nimmt eine oder mehrere Eingabedateien mit Servernamen.
ServerCrashProcedure(SCP)
zum Auflisten von RegionServers
einplanen. Formatieren Sie den Servernamen als <HOSTNAME>,<PORT>,<STARTCODE>
. (Siehe HBase-Benutzeroberfläche/Protokolle.)
In diesem Beispiel wird RegionServer
a.example.org, 29100,1540348649479
verwendet:
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
Die PIDs der erstellten ServerCrashProcedures
werden zurückgegeben oder -1, wenn keine Prozedur erstellt wird. (Warum nicht, finden Sie unter Masterprotokolle.) Die Befehlsunterstützung wird in den HBase-Versionen 2.0.3, 2.1.2, 2.2.0 oder höher hinzugefügt. Wenn -i or --inputFiles
angegeben ist, übergibt es einen oder mehrere Eingabedateinamen. Jede Datei enthält <SERVERNAME>
, eins pro Zeile. Beispiel:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar scheduleRecoveries -i fileName1 fileName2
Beheben von Problemen
In diesem Abschnitt können Sie häufige Probleme beheben.
Allgemeine Prinzipien
Stellen Sie bei der Reparatur zuerst sicher, dass hbase:meta
konsistent ist, bevor Sie einen anderen Problemtyp beheben, z. B. eine Dateisystemabweichung. Abweichungen im Dateisystem oder Probleme mit dem Zuweisen sollten behoben werden, nachdem hbase:meta
in Ordnung gebracht wurde. Wenn bei hbase:meta
Probleme auftreten, kann der Master keine richtigen Platzierungen vornehmen, wenn verwaiste Dateisystemdaten übernommen oder Regionenzuweisungen vorgenommen werden.
Eine Region kann nicht zugewiesen werden, wenn sie sich im Zustand CLOSING befindet (oder umgekehrt, nicht zugewiesen, wenn sie sich im Zustand OPENING befindet), ohne dass zuerst zu CLOSED übergegangen wird. Regionen müssen immer von CLOSED zu OPENING zu OPEN und dann zu CLOSING und CLOSED wechseln.
Wenn Sie eine Reparatur vornehmen, korrigieren Sie Tabellen einzeln.
Wenn eine Tabelle DISABLED ist, können Sie keine Region zuweisen. In den Masterprotokollen sehen Sie, dass die Masterberichte übersprungen wurden, da die Tabelle DEAKTIVIERT ist. Sie können eine Region zuweisen, da sie sich derzeit im Zustand OPENING befindet und sie den Status CLOSED haben soll, damit sie dem Zustand DISABLED der Tabelle zustimmt. In diesem Fall müssen Sie den Tabellenstatus möglicherweise vorübergehend auf ENABLED festlegen, sodass Sie die Zuweisung durchführen können. Setzen Sie sie nach der Anweisung zum Aufheben der Zuweisung wieder zurück. HBCK2 verfügt über die Möglichkeit, diese Änderung vorzunehmen. Weitere Informationen finden Sie in der HBCK2-Nutzungsausgabe.
Zuweisen und Zuweisung aufheben
Im Allgemeinen bleibt der Master bei der Zuweisung so lange aktiv, bis er erfolgreich ist. Ein Zuweisen nimmt eine exklusive Sperre für die Region an. Die Sperre schließt die Ausführung einer gleichzeitigen Zuweisung oder Aufhebung der Zuweisung aus. Eine Zuweisung gegen eine gesperrte Region wartet, bis die Sperre aufgehoben wird, bevor sie ausgeführt wird.
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.
Der Master kann den Startvorgang nicht fortsetzen, weil es kein Verfahren gibt, um hbase:meta
(oder hbase:namespace
) zuzuweisen. Verwenden Sie das HBCK2-Tool, um eine Einschleusung zu erstellen:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar assigns -skip 1588230740
In diesem Beispiel ist 1588230740 der codierte Name der Region hbase:meta
. Übergeben Sie die Option -skip
, um HBCK2 abzuhalten, eine Versionsüberprüfung für den Remote-Master durchzuführen. Wenn der Remote-Master nicht verfügbar ist, fragt die Versionsprüfung nach einer Master is initializing response
oder PleaseHoldException
und bricht den Zuweisungsversuch ab. Der Befehl -skip
vermeidet die Versionsprüfung und landet die geplante Zuweisung.
Das gleiche kann mit der Systemtabelle hbase:namespace
geschehen. Suchen Sie den kodierten Regionsnamen der hbase:namespace
-Region und gehen Sie ähnlich vor wie bei hbase:meta
. In diesem letzteren Fall gibt der Master tatsächlich eine hilfreiche Nachricht aus, die wie in diesem Beispiel aussieht:
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.
So planen Sie eine Zuweisung für die in der vorangegangenen Protokollzeile genannte hbase:namespace
-Tabelle:
hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 9559cf72b8e81e1291c626a8e781a6ae
Übergeben Sie den codierten Namen für die Namespace-Region. (Der codierte Name unterscheidet sich je nach Bereitstellung.)
Wiederherstellen/Wiederaufbau von fehlenden Regionen in hbase:meta-Regionen/Tabellen
In einigen ungewöhnlichen Fällen wurden Tabellenbereiche aus der hbase:meta
-Tabelle entfernt. Die Untersuchung dieser Fälle ergab, dass sie vom Betreiber verursacht wurden. Benutzer führten das veraltete HBCK1 OfflineMetaRepair-Tool für einen HBCK2-Cluster aus. OfflineMetaRepair ist ein bekanntes Tool zur Behebung von Problemen mit hbase:meta
-Tabellen in HBase 1.x-Versionen. Die ursprüngliche Version ist nicht mit HBase 2.x oder höher kompatibel und wurde einige Anpassungen unterzogen. Im Extremfall kann es jetzt über HBCK2 ausgeführt werden.
In den meisten dieser Fälle fehlen Regionen zufällig in hbase:meta
, aber hbase kann immer noch funktionsfähig sein. In diesen Fällen kann das Problem mit dem Master online behoben werden, indem der Befehl addFsRegionsMissingInMeta
in HBCK2 verwendet wird. Dieser Befehl ist weniger störend für hbase als eine vollständige Neuerstellung von hbase:meta
, die später behandelt wird. Er kann sogar zum Wiederherstellen des Namespacetabellenbereichs verwendet werden.
Wiederherstellen/Wiederaufbau von zusätzlichen Regionen in hbase:meta-Regionen/Tabellen
Es kann auch Situationen geben, in denen Tabellenbereiche im Dateisystem entfernt wurden, aber immer noch zugehörige Einträge in der Tabelle hbase:meta
vorhanden sind. Dieses Szenario kann aufgrund von Problemen beim Teilen, manuellen Fehlern (z. B. manuelles Löschen/Verschieben des Regionsverzeichnisses) oder sogar aufgrund von Problemen mit dem Verlust von Metadaten wie HBASE-21843 auftreten.
Diese Probleme können mit dem Master online behoben werden, indem der Befehl extraRegionsInMeta --fix
in HBCK2 verwendet wird. Dieser Befehl ist weniger störend für hbase als eine vollständige Neuerstellung von hbase:meta
, die später behandelt wird. Das ist auch nützlich, wenn dies bei Versionen auftritt, die die Option fixMeta
HBCK2 nicht unterstützen (alle Versionen vor 2.0.6, 2.1.6, 2.2.1, 2.3.0 oder 3.0.0).
Neuerstellungsrezept für Online hbase:meta
Wenn die Beschädigung von hbase:meta
nicht zu kritisch ist, kann hbase es immer noch online bringen. Selbst wenn die Namespace-Region zu den fehlenden Regionen gehört, ist es möglich, hbase:meta
während der Initialisierungsphase zu scannen, in der der Master darauf wartet, dass der Namespace zugewiesen wird. Um diese Situation zu überprüfen, kann ein hbase:meta
Scanbefehl ausgeführt werden. Wenn kein Timeout auftritt oder Fehler angezeigt werden, ist hbase:meta
online:
echo "scan 'hbase:meta', {COLUMN=>'info:regioninfo'}" | hbase shell
HBCK2 addFsRegionsMissingInMeta
kann verwendet werden, wenn in der Nachricht keine Fehler angezeigt werden. Es liest Regionsmetadateninformationen, die in den FS-Regionsverzeichnissen verfügbar sind, um Regionen in hbase:meta
neu zu erstellen. Da es mit hbase teilweise betriebsbereit ausgeführt werden kann, versucht es, Onlinetabellen zu deaktivieren, die vom gemeldeten Problem betroffen sind, und es wird in Regionen gelesen, die in hbase:meta
gelesen werden. Es kann nach bestimmten Tabellen oder Namespaces oder auf alle Tabellen aus allen Namespaces suchen. Dieses Beispiel zeigt das Hinzufügen fehlender Regionen für Tabellen tbl_1
im Standard-Namespace, tbl_2
im Namespace n1
und für alle Tabellen aus dem Namespace 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
Da es unabhängig von Master funktioniert, sind nach erfolgreichem Abschluss weitere Schritte erforderlich, um die neu hinzugefügten Regionen zuzuweisen. Diese Meldungen werden wie folgt aufgelistet:
addFsRegionsMissingInMeta
gibt einen Befehl „assigns“ mit allen Regionen aus, die gelesen wurden. Dieser Befehl muss später ausgeführt werden, also kopieren und speichern Sie ihn, damit Sie ihn griffbereit haben.- Bei HBase-Versionen vor 2.3.0 müssen Sie, nachdem
addFsRegionsMissingInMeta
erfolgreich abgeschlossen und die Ausgabe gespeichert wurde, alle laufenden HBase-Master neu starten.
Sobald die Master neu gestartet sind und hbase:meta
bereits online ist (überprüfen Sie, ob die Web-Benutzeroberfläche zugänglich ist), führen Sie den Befehl „assigns“ aus der zuvor gespeicherten Ausgabe addFsRegionsMissingInMeta
aus.
Hinweis
Wenn die Namespace-Region zu den fehlenden Regionen gehört, müssen Sie das Flag --skip
am Anfang des zurückgegebenen „assigns“-Befehls hinzufügen.
Sollte ein Cluster einen schwerwiegenden Verlust der hbase:meta
-Tabelle erleiden, ist eine grobe Neuerstellung mit dem folgenden Rezept möglich. In der Gliederung beenden wir den Cluster. Führen Sie das Werkzeug HBCK2 OfflineMetaRepair aus, das Verzeichnisse und Metadaten liest, die in das Dateisystem gefallen sind, und versuchen Sie, eine funktionsfähige hbase:met
-Tabelle neu zu erstellen. Starten Sie Ihren Cluster neu. Injizieren Sie eine Zuweisung, um die System-Namespacetabelle online zu schalten. Weisen Sie schließlich die Benutzerbereichstabellen neu zu, die Sie aktivieren möchten. (Das neu erstellte hbase:meta
erstellt eine Tabelle, in der alle Tabellen offline und keine Regionen zugewiesen sind.)
Detailliertes Neuerstellungsrezept
Hinweis
Verwenden Sie diese Option nur als letztes Mittel. Wir raten davon ab.
Beenden Sie den Cluster.
Führen Sie den Befehl „rebuild
hbase:meta
“ aus HBCK2 aus. Dieser Befehl verschiebt das Original-hbase:meta
und setzt ein neu erstelltes ein. In diesem Beispiel wird gezeigt, wie das Tool ausgeführt wird. Es fügt das Flag-details
hinzu, damit das Tool Informationen zu den Regionen abgibt, die in HDFS gefunden werden: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
Starten Sie den Cluster. Er wird nicht vollständig gestartet. Er bleibt hängen, da die Namespace-Tabelle nicht online ist und es keine Zuweisungsprozedur im Prozedurspeicher für diese Eventualität gibt. Im Protokoll „HBase Master“ wird dieser Zustand angezeigt. In diesem Beispiel wird gezeigt, was protokolliert wird:
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.
Um die Namespace-Tabellenregion zuzuweisen, können Sie die Shell nicht verwenden. Wenn Sie die Shell verwenden, tritt mit
PleaseHoldException
ein Fehler auf, da der Master noch nicht verfügbar ist. (Es wartet darauf, dass die Namespacetabelle online geschaltet wird, bevor sie sich selbst als "up" deklariert.) Sie müssen den Befehl „HBCK2 assigns“ verwenden. Zum Zuweisen benötigen Sie den Namespace-codierten Namen. Es wird im Protokoll in Anführungszeichen angezeigt. Das ist in diesem Fall725a0fe6c2c869d3d0a9ed82bfa80fa3
. Sie müssen den Befehl-skip
übergeben, um die Masterversionsprüfung zu überspringen. (Ohne sie löst Ihr HBCK2-Aufruf diePleaseHoldException
aus, da der Master noch nicht aktiviert ist.) In diesem Beispiel wird eine Zuweisung der Namespacetabelle hinzugefügt:hbase --config /etc/hbase/conf hbck -j ~/hbase-operator-tools/hbase-hbck2/target/hbase-hbck2-1.x.x-SNAPSHOT.jar -skip assigns 725a0fe6c2c869d3d0a9ed82bfa80fa3
Wenn der Aufruf mit
Connection refused
zurückkommt, ist der Master aktiviert? Der Master wird nach einer Weile heruntergefahren, wenn er sich nicht selbst initialisieren kann. Starten Sie den Cluster/ Master neu, und führen Sie den Befehl „assigns“ erneut aus.Wenn die Zuweisungen erfolgreich ausgeführt werden, wird eine ähnliche Ausgabe wie im folgenden Beispiel angezeigt. Die
48
am Ende ist die PID des Zeitplans für die Zuweisung von Prozeduren. Wenn die zurückgegebene PID-1
ist, dann ist der Start des Masters noch nicht ausreichend fortgeschritten. Versuchen Sie es also erneut. Oder der codierte Regionsname ist möglicherweise falsch. Suchen Sie also nach diesem Problem.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]
Überprüfen Sie die Master-Protokolle. Der Master hätte starten müssen. Es wird ein erfolgreicher Abschluss von PID=48 angezeigt. Suchen Sie nach einer Zeile wie in diesem Beispiel, um den erfolgreichen Start des Masters zu überprüfen:
master.HMaster: Master has completed initialization 132.515sec
Es kann eine Weile dauern, bis das angezeigt wird.
Die Neuerstellung von
hbase:meta
fügt die Benutzertabellen im Zustand DISABLED und die Regionen im Modus CLOSED hinzu. Aktivieren Sie Tabellen über die Shell erneut, um alle Tabellenregionen wieder online zu schalten. Führen Sie einen nach dem anderen aus oder sehen Sie sich den Befehl „enable all ".*"“ an, um alle Tabellen auf einmal zu aktivieren.In der Neuerstellungs-Meta fehlen Bearbeitungen und sie muss möglicherweise mit Hilfe der zuvor in diesem Artikel beschriebenen Einrichtungen repariert und bereinigt werden.
Abgelegte Referenzdateien, fehlende hbase.version-Datei und beschädigte Dateien
HBCK2 kann auf hängende Verweise und beschädigte Dateien überprüfen. Sie können das Programm auffordern, fehlerhafte Dateien auszulagern, was notwendig sein kann, um Schwachstellen zu überwinden, bei denen Regionen nicht online gehen oder Lesevorgänge fehlschlagen. Sehen Sie sich den Befehl „dateisystem“ im HBCK2-Eintrag an. Übergeben Sie mindestens einen Tabellennamen (oder verwenden Sie none
, um alle Tabellen zu überprüfen). Fehlerhafte Dateien werden gemeldet. Übergeben Sie die Option --fix
zum Ausführen von Reparaturen.
Neustart der Prozedur
Wenn der Master als letztes Mittel verzweifelt ist und alle Reparaturversuche nur zu nicht lösbaren Sperren oder nicht beendbaren Prozeduren führen oder wenn die Menge der MasterProcWALs
in Unermessliche wächst, ist es möglich, den Masterstatus sauber zu löschen. Verschieben Sie das Verzeichnis /hbase/MasterProcWALs/
unter Ihrer HBase-Installation und starten Sie den Master-Prozess neu. Es wird als tabellarisches Format ohne Arbeitsspeicher zurückgebracht.
Wenn zum Zeitpunkt des Löschens alle Regionen zufriedenstellend zugewiesen oder ausgeschaltet waren, sollte der Master nach dem Neustart weitermachen, als wäre nichts geschehen. Wenn es jedoch zu diesem Zeitpunkt Regionen im Übergang gab, muss der Betreiber eingreifen, um ausstehende Zuweisungen oder Aufhebungen an ihren Endpunkt zu bringen.
Lesen Sie die Spalten hbase:meta
info:state
wie beschrieben, um zu bestimmen, wofür eine Zuweisung erfolgen bzw. aufgehoben werden muss. Nachdem der gesamte Verlauf gelöscht wurde, indem Sie die MasterProcWALs
entfernt haben, sollte keine der Entitäten gesperrt sein, sodass Sie die Massenzuweisung oder die Zuweisung aufheben können.