Migrieren von Apache HBase zu einer neuen Version und einem neuen Speicherkonto

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

Dieser Artikel ist nur relevant, wenn Sie verschiedene Speicherkonten für Ihre Quell- und Zielcluster verwenden müssen. Informationen zum Upgrade von Versionen mit demselben Speicherkonto für Ihre Quell- und Zielcluster finden Sie unter Migrieren eines Apache HBase-Clusters zu einer neuen Version.

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

Kritische Inkompatibilitäten sollten in den Versionshinweisen für die HBase-Version beschrieben werden. Testen Sie Ihre Anwendung in einem Cluster mit der Zielversion von HDInsight und HBase.

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 Upgrade und Migration für einen Apache HBase-Cluster in Azure HDInsight auf ein neues Speicherkonto durchzuführen. Ausführlichere Anweisungen finden Sie in den ausführlichen Schritten und Befehlen.

Bereiten Sie den Quellcluster vor:

  1. Beenden Sie die Datenerfassung.
  2. memstore Daten leeren.
  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. Bereinigen Sie die Zookeeper-Daten.
  4. Wechseln zum Benutzer „HBase“.

Führen Sie die Migration durch:

  1. Bereinigen Sie das Zieldateisystem, migrieren Sie die Daten, und entfernen Sie /hbase/hbase.id.
  2. Bereinigen und migrieren Sie das WAL-Verzeichnis.
  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 die folgenden ausführlichen Schritte und Befehle zum Migrieren Ihres Apache HBase-Clusters mit einem neuen Speicherkonto.

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 der memstoresDatei 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 hbase-utils durchführen.

    Sie können die memstore-Daten auch leeren, indem Sie den folgenden HBase-Shellbefehl im 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 des Quellclusters oder Workerknoten 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 ein neues HDInsight-Zielcluster ein, der ein anderes Speicherkonto als das Quellcluster verwendet.

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

  3. 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
    
  4. Wechseln Sie den Benutzer in „HBase“, indem Sie sudo su hbase ausführen.

Bereinigen und Migrieren von Dateisystem und WAL

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.

Für das Speicherkonto entspricht <container-endpoint-url> der URL https://<storageaccount>.blob.core.windows.net/<container-name>. Übergeben Sie das SAS-Token für das Speicherkonto ganz am Ende der URL.

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

Kopierbefehle

Der HDFS-Kopierbefehl lautet hdfs dfs <copy properties starting with -D> -cp.

Verwenden Sie hadoop distcp, um die Leistung beim Kopieren von Dateien, die nicht in einem Seitenblob enthalten sind, zu verbessern: hadoop distcp <copy properties starting with -D>

Um den Schlüssel des Speicherkontos zu übergeben, verwenden Sie:

  • -Dfs.azure.account.key.<storageaccount>.blob.core.windows.net='<storage account key>'
  • -Dfs.azure.account.keyprovider.<storageaccount>.blob.core.windows.net=org.apache.hadoop.fs.azure.SimpleKeyProvider

Sie können auch AzCopy verwenden, um die Leistung beim Kopieren von HBase-Datendateien zu verbessern.

  1. Führen Sie den AzCopy-Befehl aus:

    azcopy cp "<source-container-endpoint-url>/hbase" "<target-container-endpoint-url>" --recursive
    
  2. Führen Sie diesen Schritt nach dem Kopieren durch, wenn das Zielspeicherkonto ein Azure-Blobspeicher ist. Überspringen Sie diesen Schritt, wenn das Zielspeicherkonto ein Data Lake Storage Gen2-Konto ist.

    Der Hadoop WASB-Treiber verwendet spezielle Blobs der Größe 0, die jedem Verzeichnis entsprechen. AzCopy überspringt diese Dateien beim Kopieren. Einige WASB-Vorgänge verwenden diese Blobs, daher müssen Sie sie im Zielcluster erstellen. Führen Sie den folgenden Hadoop-Befehl auf einem beliebigen Knoten im Zielcluster aus, um die Blobs zu erstellen:

    sudo -u hbase hadoop fs -chmod -R 0755 /hbase
    

Sie können AzCopy unter Erste Schritte mit AzCopy herunterladen. Weitere Informationen zur Verwendung von AzCopy finden Sie unter azcopy copy.

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

  1. Führen Sie die folgenden Befehle aus, um das Dateisystem zu bereinigen und die Daten zu migrieren:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. Entfernen Sie hbase.id, indem Sie hdfs dfs -rm /hbase/hbase.id ausführen.

  3. Führen Sie zum Bereinigten und Migrieren von WAL die folgenden Befehle aus:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal
    hdfs dfs -cp <source-container-fullpath>/hbase-wal-backup/hbasewal hdfs://<destination-cluster>/hbasewal
    

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

  1. Führen Sie die folgenden Befehle aus, um das Dateisystem zu bereinigen und die Daten zu migrieren:

    hdfs dfs -rm -r /hbase 
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase /
    hdfs dfs -rm -r /hbase/*WALs
    
  2. Entfernen Sie hbase.id, indem Sie hdfs dfs -rm /hbase/hbase.id ausführen.

  3. Führen Sie zum Bereinigten und Migrieren von WAL die folgenden Befehle aus:

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

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

  1. Führen Sie die folgenden Befehle aus, um das Dateisystem zu bereinigen und die Daten zu migrieren:

    hdfs dfs -rm -r /hbase 
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase /
    hdfs dfs -rm -r /hbase/*WALs
    
  2. Entfernen Sie hbase.id, indem Sie hdfs dfs -rm /hbase/hbase.id ausführen.

  3. Führen Sie zum Bereinigten und Migrieren von WAL die folgenden Befehle aus:

    hdfs dfs -rm -r /hbase-wals/*
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -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

  1. Führen Sie die folgenden Befehle aus, um das Dateisystem zu bereinigen und die Daten zu migrieren:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. Entfernen Sie hbase.id, indem Sie hdfs dfs -rm /hbase/hbase.id ausführen.

  3. Führen Sie zum Bereinigten und Migrieren von WAL die folgenden Befehle aus:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals hdfs://<destination-cluster>/hbasewal
    

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

  1. Führen Sie die folgenden Befehle aus, um das Dateisystem zu bereinigen und die Daten zu migrieren:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. Entfernen Sie hbase.id, indem Sie hdfs dfs -rm /hbase/hbase.id ausführen.

  3. Führen Sie zum Bereinigten und Migrieren von WAL die folgenden Befehle aus:

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

Fertigstellen der Migration

  1. Speichern Sie Ihre Änderungen im Zielcluster, und starten Sie alle erforderlichen Dienste wie von Ambari angegeben neu.

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

  3. Starten Sie die Datenerfassung.

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

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

Nächste Schritte

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