Migrieren der standardmäßigen Hive-Metastore-Datenbank zu einer externen Metastore-Datenbank
In diesem Artikel wird erläutert, wie Sie Metadaten aus einer standardmäßigen Metastore-Datenbank für Hive zu einer externen SQL-Datenbank-Instanz in HDInsight migrieren.
Gründe für die Migration zu einer externen Metastore-Datenbank
Die standardmäßige Metastore-Datenbank ist auf die Basic-SKU beschränkt und kann Workloads im Produktionsmaßstab nicht verarbeiten.
Eine externe Metastore-Datenbank ermöglicht Kunden die horizontale Skalierung von Hive-Computeressourcen durch Hinzufügen neuer HDInsight-Cluster, die dieselbe Metastore-Datenbank verwenden.
Bei der Migration von HDInsight 3.6 zu 4.0 müssen Metadaten obligatorisch zu einer externen Metastore-Datenbank migriert werden, bevor ein Upgrade der Hive-Schemaversion ausgeführt werden kann. Weitere Informationen finden Sie unter Migrieren von Azure HDInsight 3.6-Hive-Workloads zu HDInsight 4.0.
Der Standardmetaspeicher DB mit eingeschränkter Computekapazität empfehlen wir daher eine geringe Auslastung von anderen Aufträgen im Cluster beim Migrieren von Metadaten.
Die Quell- und Zieldatenbanken müssen dieselbe HDInsight-Version und dieselben Speicherkonten verwenden. Im Fall eines Upgrades von HDInsight 3.6 auf 4.0 führen Sie zuerst die Schritte in diesem Artikel aus. Danach führen Sie die hier beschriebenen offiziellen Schritte für das Upgrade aus.
Voraussetzungen
Führen Sie die folgende Skriptaktion aus, um diese Speicherorte für andere Cluster portierbar zu machen. Weitere Informationen finden Sie unter Skriptaktion für einen ausgeführten Cluster.
Diese Aktion ähnelt dem Ersetzen von Symlinks durch ihre vollständigen Pfade.
Eigenschaft | Wert |
---|---|
Bash-Skript-URI | https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive-adl-expand-location-v01.sh |
Knotentypen | Head |
Parameter | "" |
Migrieren mit Export/Import über sqlpackage
Nur nach dem 15.10.2020 erstellte HDInsight-Cluster unterstützen SQL-Export-/Importfunktionen für die standardmäßige Hive-Metastore-Datenbank über sqlpackage
.
Installieren Sie sqlpackage im Cluster.
Exportieren Sie mit dem folgenden Befehl die standardmäßige Metastore-Datenbank in eine BACPAC-Datei.
wget "https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive_metastore_tool.py" SQLPACKAGE_FILE='/home/sshuser/sqlpackage/sqlpackage' # replace with sqlpackage location TARGET_FILE='hive.bacpac' sudo python hive_metastore_tool.py --sqlpackagefile $SQLPACKAGE_FILE --targetfile $TARGET_FILE
Speichern Sie die BACPAC-Datei.
hdfs dfs -mkdir -p /bacpacs hdfs dfs -put $TARGET_FILE /bacpacs/
Importieren Sie die BACPAC-Datei in eine neue Datenbank, indem Sie die hier aufgeführten Schritte ausführen.
Die neue Datenbank kann als externe Metastore-Datenbank in einem neuen HDInsight-Cluster konfiguriert werden.
Migrieren mithilfe eines Hive-Skripts
Cluster, die vor dem 15.10.2020 erstellt wurden, unterstützen das Exportieren/Importieren der standardmäßigen Metastore-Datenbank nicht.
Befolgen Sie für solche Cluster den Leitfaden Kopieren von Hive-Tabellen zwischen Speicherkonten, und verwenden Sie dabei einen zweiten Cluster mit einer externen Hive-Metastore-Datenbank. Der zweite Cluster kann dasselbe Speicherkonto nutzen, muss aber ein neues Standarddateisystem verwenden.
Option zum Erstellen flacher Kopien
Wenn mithilfe der Schritte tiefe Kopien von Tabellen erstellt werden, verdoppelt sich der Speicherverbrauch. In diesem Fall müssen Sie die Daten im Quellspeichercontainer manuell bereinigen. Stattdessen können Sie flache Kopien der Tabellen erstellen, wenn es sich nicht um transaktionale Daten handelt. In HDInsight 3.6 sind standardmäßig alle Hive-Tabellen nicht transaktional, in HDInsight 4.0 dagegen sind nur externe Tabellen nicht transaktional. Für transaktionale Tabellen müssen tiefe Kopien erstellt werden. Führen Sie die folgenden Schritte aus, um das Erstellen flacher Kopien für nicht transaktionale Tabellen zu ermöglichen:
- Führen Sie das Skript hive-ddls.sh im primären Hauptknoten des Quellclusters aus, um die DDL für jede Hive-Tabelle zu generieren.
- Die DDL wird in ein lokales Hive-Skript namens
/tmp/hdi_hive_ddls.hql
geschrieben. Führen Sie dieses Skript in einem Zielcluster aus, der eine externe Hive-Metastore-Datenbank verwendet.
Überprüfen, ob alle Hive-Tabellen importiert wurden
Der folgende Befehl verwendet eine SQL-Abfrage in der Metastore-Datenbank, um alle Hive-Tabellen und ihre Datenspeicherorte auszugeben. Vergleichen Sie die Ausgabe des neuen und des alten Cluster, um sicherzustellen, dass in der neuen Metastore-Datenbank keine Tabellen fehlen.
SCRIPT_FNAME='hive_metastore_tool.py'
SCRIPT="/tmp/$SCRIPT_FNAME"
wget -O "$SCRIPT" "https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/$SCRIPT_FNAME"
OUTPUT_FILE='/tmp/hivetables.csv'
QUERY="SELECT DBS.NAME, TBLS.TBL_NAME, SDS.LOCATION FROM SDS, TBLS, DBS WHERE TBLS.SD_ID = SDS.SD_ID AND TBLS.DB_ID = DBS.DB_ID ORDER BY DBS.NAME, TBLS.TBL_NAME ASC;"
sudo python "$SCRIPT" --query "$QUERY" > $OUTPUT_FILE
Weiterführende Themen
- Migrieren von Azure HDInsight 3.6-Hive-Workloads zu HDInsight 4.0
- Hive-Workloadmigration zu neuem Konto in Azure Storage
- Herstellen einer Verbindung mit Apache Beeline in HDInsight oder lokales Installieren
- Szenario: Fehler vom Typ „Berechtigung verweigert“ beim Erstellen einer Apache Hive-Tabelle in Azure HDInsight