Migrieren eines Apache HBase-Clusters zu einer neuen Version

In diesem Artikel wird erläutert, wie Sie ein Update für Ihren Apache HBase-Cluster in Azure HDInsight auf eine neuere Version durchführen.

Dieser Artikel ist nur relevant, wenn Sie dasselbe Azure Storage-Konto für Ihre Quell- und Zielcluster verwenden. Informationen zum Durchführen eines Upgrades mit einem neuen oder anderen Azure Storage-Konto für Ihren Zielcluster finden Sie unter Migrieren von Apache HBase zu einer neuen Version mit einem neuen Azure Storage-Konto.

Die Downtime durch das Upgrade sollte nur wenige Minuten dauern. Sie ist auf das Leeren sämtlicher In-Memory-Daten und auf die Konfiguration und den Neustart der Dienste im neuen Cluster zurückzuführen. Die Ergebnisse variieren je nach Kontenanzahl, Datenmenge und anderen Variablen.

Überprüfen der Apache HBase-Kompatibilität

Vergewissern Sie sich vor dem Apache HBase-Upgrade, dass die HBase-Versionen im Quell- und Zielcluster kompatibel sind. Überprüfen Sie die HBase-Versionskompatibilitätsmatrix und die Versionshinweise im HBase-Referenzleitfaden, um sicherzustellen, dass Ihre Anwendung mit der neuen Version kompatibel ist.

Hier sehen Sie ein Beispiel für eine Kompatibilitätsmatrix. Hierbei steht „Y“ für Kompatibilität und „N“ für eine potenzielle Inkompatibilität.

Kompatibilitätstyp Hauptversion Nebenversion Patch
Client-Server-Verbindungskompatibilität N J J
Server-Server-Kompatibilität N J J
Dateiformatkompatibilität N J J
Client-API-Kompatibilität N J J
Client-Binärkompatibilität N N J
Serverseitig eingeschränkte API-Kompatibilität
Stable N J J
In Entwicklung N N J
Instabil N N N
Abhängigkeitskompatibilität N J J
Betriebskompatibilität N N J

Weitere Informationen über HDInsight-Versionen und die Kompatibilität finden Sie unter Azure HDInsight-Versionen.

Übersicht über die Migration von Apache HBase-Clustern

Führen Sie die folgenden einfachen Schritte aus, um ein Upgrade für Ihre Apache HBase-Cluster in Azure HDInsight durchzuführen. Ausführliche Anweisungen finden Sie in den detaillierten Schritten und Befehlen, oder verwenden Sie für eine automatisierte Migration die Skripts aus dem Abschnitt Migrieren von HBase mithilfe von Skripts.

Bereiten Sie den Quellcluster vor:

  1. Beenden Sie die Datenerfassung.
  2. Leeren Sie die Memstore-Daten.
  3. Beenden Sie HBase über Ambari.
  4. Sichern Sie das WAL-Verzeichnis (Write Ahead Log), wenn Sie Cluster mit beschleunigten Schreibvorgängen verwenden.

Bereiten Sie den Zielcluster vor:

  1. Erstellen Sie den Zielcluster.
  2. Beenden Sie HBase über Ambari.
  3. Ändern Sie fs.defaultFS in der HDFS-Dienstkonfiguration so, dass auf den ursprünglichen Quellclustercontainer verwiesen wird.
  4. Ändern Sie hbase.rootdir in der HBase-Dienstkonfiguration so, dass auf den ursprünglichen Quellclustercontainer verwiesen wird, wenn Sie Cluster mit beschleunigten Schreibvorgängen verwenden.
  5. Bereinigen Sie die Zookeeper-Daten.

Führen Sie die Migration durch:

  1. Bereinigen und migrieren Sie das WAL-Verzeichnis.
  2. Kopieren Sie die Apps aus dem Standardcontainer des Zielclusters in den ursprünglichen Quellcontainer.
  3. Starten Sie alle Dienste über den Ambari-Zielcluster.
  4. Überprüfen Sie HBase.
  5. Löschen Sie den Quellcluster.

Ausführliche Schritte und Befehle für die Migration

Verwenden Sie diese ausführlichen Schritte und Befehle zum Migrieren Ihres Apache HBase-Clusters.

Vorbereiten des Quellclusters

  1. Beenden Sie die Datenerfassung im HBase-Quellcluster.

  2. Leeren Sie den HBase-Quellcluster, für den Sie das Upgrade durchführen.

    HBase schreibt eingehende Daten in einen In-Memory-Speicher, der als Memstore bezeichnet wird. Wenn der Memstore eine bestimmte Größe erreicht, wird er von HBase zur langfristigen Speicherung im Speicherkonto des Clusters auf den Datenträger geschrieben. Beim Löschen des Quellclusters nach einem Upgrade werden auch alle Daten in den Memstore-Instanzen gelöscht. Zum Beibehalten der Daten müssen Sie die Memstore-Instanzen aller Tabellen manuell auf den Datenträger leeren, bevor Sie das Upgrade durchführen.

    Sie können die Memstore-Daten leeren, indem Sie das Skript flush_all_tables.sh über das GitHub-Repository Azure hbase-utils durchführen.

    Sie können die Memstore-Daten auch leeren, indem Sie den folgenden HBase-Shellbefehl über den HDInsight-Cluster ausführen:

    hbase shell
    flush "<table-name>"
    
  3. Melden Sie sich mit https://<OLDCLUSTERNAME>.azurehdinsight.net bei Apache Ambari auf dem Quellcluster an, und beenden Sie die HBase-Dienste.

  4. Aktivieren Sie über die Eingabeaufforderung zur Bestätigung das Kontrollkästchen, um den Wartungsmodus für HBase zu aktivieren.

    Weitere Informationen zur Verbindungsherstellung mit Ambari sowie zur Verwendung finden Sie unter Verwalten von HDInsight-Clustern mithilfe der Ambari-Webbenutzeroberfläche.

  5. Wenn Ihr HBase-Quellcluster nicht über das Feature Beschleunigte Schreibvorgänge verfügt, überspringen Sie diesen Schritt. Sichern Sie für HBase-Quellcluster mit beschleunigten Schreibvorgängen das WAL-Verzeichnis unter HDFS, indem Sie die folgenden Befehle über eine SSH-Sitzung auf einem beliebigen Zookeeper-Knoten oder -Workerknoten des Quellclusters ausführen.

    hdfs dfs -mkdir /hbase-wal-backup
    hdfs dfs -cp hdfs://mycluster/hbasewal /hbase-wal-backup
    

Vorbereiten des Zielclusters

  1. Richten Sie im Azure-Portal einen neuen HDInsight-Zielcluster mithilfe desselben Speicherkontos ein, das für den Quellcluster verwendet wurde, aber verwenden Sie einen anderen Containernamen:

  2. Melden Sie sich auf dem neuen Cluster unter https://<NEWCLUSTERNAME>.azurehdinsight.net bei Apache Ambari an, und beenden Sie die HBase-Dienste.

  3. Ändern Sie unter Services>HDFS>Configs>Advanced>Advanced core-site (Dienste > HDFS > Konfiguration > Erweitert > Core-Website (erweitert)) die HDFS-Einstellung fs.defaultFS, sodass diese auf den Containernamen des ursprünglichen Quellclusters verweist. Beispielsweise sollte die Einstellung im folgenden Screenshot in wasbs://hbase-upgrade-old-2021-03-22 geändert werden.

    Ändern des Containernamens in Ambari unter „Services > HDFS > Configs > Advanced > Advanced core-site“

  4. Wenn Ihr Zielcluster über das Feature für beschleunigte Schreibvorgänge verfügt, ändern Sie den Pfad hbase.rootdir so, dass er auf den Containernamen des ursprünglichen Quellclusters verweist. Der folgende Pfad sollte beispielsweise in hbase-upgrade-old-2021-03-22 geändert werden. Überspringen Sie diesen Schritt, wenn Ihr Cluster nicht über beschleunigte Schreibvorgänge verfügt.

    Ändern des Containernamens für das HBase-Stammverzeichnis in Ambari

  5. Bereinigen Sie die Zookeeper-Daten auf dem Zielcluster, indem Sie die folgenden Befehle auf einem beliebigen Zookeeper-Knoten oder -Workerknoten ausführen:

    hbase zkcli
    rmr /hbase-unsecure
    quit
    

Bereinigen und Migrieren des WAL-Verzeichnisses

Führen Sie die folgenden Befehle abhängig von Ihrer HDI-Quellversion und dem Vorhandensein beschleunigter Schreibvorgänge auf Ihren Quell- und Zielclustern aus.

  • Der Zielcluster weist immer HDI-Version 4.0 auf, da HDI 3.6 im Basic-Support enthalten ist und für neue Cluster nicht empfohlen wird.
  • Der HDFS-Kopierbefehl lautet hdfs dfs <copy properties starting with -D> -cp <source> <destination> # Serial execution.

Hinweis

  • Für den WASB-Speichertyp entspricht <source-container-fullpath> dem Pfad wasbs://<source-container-name>@<storageaccountname>.blob.core.windows.net.
  • Für den Azure Data Lake Storage Gen2-Speichertyp entspricht <source-container-fullpath> dem Pfad abfs://<source-container-name>@<storageaccountname>.dfs.core.windows.net.

Der Quellcluster entspricht HDI 3.6 oder HDI 4.0 mit beschleunigten Schreibvorgängen, und der Zielcluster verfügt über beschleunigte Schreibvorgänge

Bereinigen Sie die WAL FS-Daten für den Zielcluster, und kopieren Sie das WAL-Verzeichnis aus dem Quellcluster in die HDFS-Instanz des Zielclusters. Kopieren Sie das Verzeichnis, indem Sie die folgenden Befehle auf einem beliebigen Zookeeper-Knoten oder -Workerknoten im Zielcluster ausführen:

sudo -u hbase hdfs dfs -rm -r hdfs://mycluster/hbasewal
sudo -u hbase hdfs dfs -cp <source-container-fullpath>/hbase-wal-backup/hbasewal hdfs://mycluster/

Der Quellcluster entspricht HDI 3.6 ohne beschleunigte Schreibvorgänge, und der Zielcluster verfügt über beschleunigte Schreibvorgänge

Bereinigen Sie die WAL FS-Daten für den Zielcluster, und kopieren Sie das WAL-Verzeichnis aus dem Quellcluster in die HDFS-Instanz des Zielclusters. Kopieren Sie das Verzeichnis, indem Sie die folgenden Befehle auf einem beliebigen Zookeeper-Knoten oder -Workerknoten im Zielcluster ausführen:

sudo -u hbase hdfs dfs -rm -r hdfs://mycluster/hbasewal
sudo -u hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs" -cp <source-container>/hbase/*WALs hdfs://mycluster/hbasewal

Der Quellcluster entspricht HDI 3.6 ohne beschleunigte Schreibvorgänge, und der Zielcluster verfügt nicht über beschleunigte Schreibvorgänge

Bereinigen Sie die WAL FS-Daten für den Zielcluster, und kopieren Sie das WAL-Verzeichnis des Quellclusters in die HDFS-Instanz des Zielclusters. Führen Sie zum Kopieren des Verzeichnisses die folgenden Befehle auf einem beliebigen Zookeeper-Knoten oder -Workerknoten im Zielcluster aus:

sudo -u hbase hdfs dfs -rm -r /hbase-wals/*
sudo -u hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs" -cp <source-container-fullpath>/hbase/*WALs /hbase-wals

Der Quellcluster entspricht HDI 4.0 ohne beschleunigte Schreibvorgänge, und der Zielcluster verfügt über beschleunigte Schreibvorgänge

Bereinigen Sie die WAL FS-Daten für den Zielcluster, und kopieren Sie das WAL-Verzeichnis aus dem Quellcluster in die HDFS-Instanz des Zielclusters. Kopieren Sie das Verzeichnis, indem Sie die folgenden Befehle auf einem beliebigen Zookeeper-Knoten oder -Workerknoten im Zielcluster ausführen:

sudo -u hbase hdfs dfs -rm -r hdfs://mycluster/hbasewal
sudo -u hbase hdfs dfs -cp <source-container-fullpath>/hbase-wals/* hdfs://mycluster/hbasewal

Der Quellcluster entspricht HDI 4.0 ohne beschleunigte Schreibvorgänge, und der Zielcluster verfügt nicht über beschleunigte Schreibvorgänge

Bereinigen Sie die WAL FS-Daten für den Zielcluster, und kopieren Sie das WAL-Verzeichnis des Quellclusters in die HDFS-Instanz des Zielclusters. Führen Sie zum Kopieren des Verzeichnisses die folgenden Befehle auf einem beliebigen Zookeeper-Knoten oder -Workerknoten im Zielcluster aus:

sudo -u hbase hdfs dfs -rm -r /hbase-wals/*
sudo -u hbase hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals /

Fertigstellen der Migration

  1. Kopieren Sie mithilfe des sudo -u hdfs-Benutzerkontexts den Ordner /hdp/apps/<new-version-name> und dessen Inhalte aus <destination-container-fullpath> in den Ordner /hdp/apps unter <source-container-fullpath>. Sie können den Ordner kopieren, indem Sie die folgenden Befehle im Zielcluster ausführen:

    sudo -u hdfs hdfs dfs -cp /hdp/apps/<hdi-version> <source-container-fullpath>/hdp/apps
    

    Beispiel:

    sudo -u hdfs hdfs dfs -cp /hdp/apps/4.1.3.6 wasbs://hbase-upgrade-old-2021-03-22@hbaseupgrade.blob.core.windows.net/hdp/apps
    
  2. Speichern Sie Ihre Änderungen im Zielcluster, und starten Sie alle erforderlichen Dienste wie von Ambari angegeben neu.

  3. Verweisen Sie Ihre Anwendung auf den Zielcluster.

    Hinweis

    Der statische DNS-Name Ihrer Anwendung wird geändert, wenn Sie das Upgrade durchführen. Anstatt eine Hartcodierung für diesen DNS-Namen durchzuführen, können Sie einen CNAME-Eintrag in den DNS-Einstellungen Ihres Domänennamens konfigurieren, die auf den Namen des Clusters verweisen. Eine weitere Möglichkeit ist die Verwendung einer Konfigurationsdatei für Ihre Anwendung, die Sie ohne erneute Bereitstellung aktualisieren können.

  4. Starten Sie die Datenerfassung.

  5. Überprüfen Sie die HBase-Konsistenz und die einfachen DDL- (Datendefinitionssprache) und DML-Vorgänge (Datenbearbeitungssprache).

  6. Wenn der Zielcluster zufriedenstellend ist, löschen Sie den Quellcluster.

Migrieren von HBase mithilfe von Skripts

  1. Führen Sie das Skript migrate-hbase-source.sh für den Quellcluster und migrate-hbase-dest.sh für den Zielcluster aus. Führen Sie diese Skripts anhand der folgenden Anweisungen aus.

    Hinweis

    Diese Skripts kopieren die alten WALs von HBase im Rahmen der Migration nicht. Daher dürfen die Skripts nicht in Clustern verwendet werden, für die die Funktion für die HBase-Sicherung oder -Replikation aktiviert ist.

  2. Im Quellcluster

    sudo bash migrate-hbase-source.sh
    
  3. Im Zielcluster

    sudo bash migrate-hbase-dest.sh  -f <src_default_Fs>
    

Obligatorisches Argument für den obigen Befehl:

   -f, --src-fs
   The fs.defaultFS of the source cluster
   For example:
   -f wasb://anynamehbase0316encoder-2021-03-17t01-07-55-935z@anynamehbase0hdistorage.blob.core.windows.net

Nächste Schritte

Weitere Informationen zu Apache HBase und zum Upgraden von HDInsight-Clustern finden Sie in den folgenden Artikeln: