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 in hbase:meta fehlen, aber Verzeichnisse im HDFS noch vorhanden sind. 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 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 ns1ausgelö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 ns1mit 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 und ColumnFamilyDescriptors. 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 Fall 725a0fe6c2c869d3d0a9ed82bfa80fa3. Sie müssen den Befehl -skip übergeben, um die Masterversionsprüfung zu überspringen. (Ohne sie löst Ihr HBCK2-Aufruf die PleaseHoldException 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.