Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Sie können Daten aus einem lokalen HDFS-Speicher (Hadoop Distributed File System) Ihres Hadoop-Clusters zu Azure Storage (Blob Storage oder Data Lake Storage) migrieren, indem Sie ein Data Box-Gerät verwenden. Sie können zwischen einer Data Box Disk, einer Data Box mit einer Kapazität von 80, 120 oder 525 TiB oder einer 770 TiB Data Box Heavy wählen.
Dieser Artikel enthält Informationen zur Durchführung dieser Aufgaben:
- Vorbereiten der Migration Ihrer Daten
- Kopieren Ihrer Daten auf ein Azure Data Box Disk-, Data Box- oder Data Box Heavy-Gerät
- Zurücksenden des Geräts an Microsoft
- Anwenden von Zugriffsberechtigungen auf Dateien und Verzeichnisse (nur Data Lake Storage)
Voraussetzungen
Sie benötigen Folgendes, um die Migration durchführen zu können:
Azure Storage-Konto
Einen lokalen Hadoop-Cluster, in dem Ihre Quelldaten enthalten sind.
Ein Azure Data Box-Gerät.
Kabel und verbinden Sie Ihre Data Box oder Data Box Heavy mit einem lokalen Netzwerk.
Wenn du bereit bist, lass uns anfangen.
Kopieren Ihrer Daten auf ein Data Box-Gerät
Wenn Ihre Daten auf ein einzelnes Data Box-Gerät passen, kopieren Sie sie auf dieses Gerät.
Wenn die Datengröße die Kapazität des Data Box-Geräts überschreitet, verwenden Sie das optionale Verfahren, um die Daten auf mehrere Data Box-Geräte aufzuteilen und dann diesen Schritt auszuführen.
Wenn Sie die Daten aus Ihrem lokalen HDFS-Speicher auf ein Data Box-Gerät kopieren möchten, legen Sie einige Dinge fest, und verwenden Sie dann das DistCp-Tool .
Führen Sie diese Schritte aus, um Daten über die REST-APIs des Blob-/Objektspeichers auf Ihr Data Box-Gerät zu kopieren. Über die REST-API-Schnittstelle wird das Gerät als HDFS-Speicher für Ihren Cluster angezeigt.
Bevor Sie die Daten per REST kopieren, sollten Sie die Sicherheits- und Verbindungsprimitive zum Herstellen einer Verbindung mit der REST-Schnittstelle auf dem Data Box- oder Data Box Heavy-Gerät identifizieren. Melden Sie sich bei der lokalen Web-UI von Data Box an, und wechseln Sie zur Seite "Verbinden und Kopieren ". Suchen Sie für die Azure-Speicherkonten für Ihr Gerät unter „Zugriffseinstellungen“ nach REST, und wählen Sie diese Option aus.
Kopieren Sie im Dialogfeld "Access-Speicherkonto" und "Daten hochladen" den Blob-Dienstendpunkt und den Speicherkontoschlüssel. Lassen Sie beim Blob-Dienstendpunkt den Teil
https://
und den nachgestellten Schrägstrich weg.Der Endpunkt ist in diesem Fall:
https://mystorageaccount.blob.mydataboxno.microsoftdatabox.com/
. Der Hostteil des verwendeten URI lautet:mystorageaccount.blob.mydataboxno.microsoftdatabox.com
. Ein Beispiel finden Sie unter " Herstellen einer Verbindung mit REST über http".Fügen Sie
/etc/hosts
auf jedem Knoten den Endpunkt und die Data Box- bzw. Data Box Heavy-IP-Adresse hinzu.10.128.5.42 mystorageaccount.blob.mydataboxno.microsoftdatabox.com
Falls Sie für DNS einen anderen Mechanismus verwenden, sollten Sie sicherstellen, dass der Data Box-Endpunkt aufgelöst werden kann.
Legen Sie die Shellvariable
azjars
auf den Speicherort der JAR-Dateienhadoop-azure
undazure-storage
fest. Sie finden diese Dateien im Hadoop-Installationsverzeichnis.Um zu bestimmen, ob diese Dateien vorhanden sind, verwenden Sie den folgenden Befehl:
ls -l $<hadoop_install_dir>/share/hadoop/tools/lib/ | grep azure
. Ersetzen Sie den Platzhalter<hadoop_install_dir>
durch den Pfad zu dem Verzeichnis, in dem Sie Hadoop installiert haben. Achten Sie darauf, dass Sie vollqualifizierte Pfade zu verwenden.Beispiele:
azjars=$hadoop_install_dir/share/hadoop/tools/lib/hadoop-azure-2.6.0-cdh5.14.0.jar
azjars=$azjars,$hadoop_install_dir/share/hadoop/tools/lib/microsoft-windowsazure-storage-sdk-0.6.0.jar
Erstellen Sie den Speichercontainer, den Sie beim Kopieren von Daten verwenden möchten. Sie müssen auch ein Zielverzeichnis als Teil dieses Befehls angeben. Dies kann zu diesem Zeitpunkt ein Dummyzielverzeichnis sein.
hadoop fs -libjars $azjars \ -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \ -D fs.azure.account.key.<blob_service_endpoint>=<account_key> \ -mkdir -p wasb://<container_name>@<blob_service_endpoint>/<destination_directory>
Ersetzen Sie den Platzhalter
<blob_service_endpoint>
durch den Namen Ihres Endpunkts des Blobdiensts.Ersetzen Sie den Platzhalter
<account_key>
durch den Zugriffsschlüssel Ihres Speicherkontos.Ersetzen Sie den Platzhalter
<container-name>
durch den Namen Ihres Containers.Ersetzen Sie den Platzhalter
<destination_directory>
durch den Namen des Verzeichnisses, in das Sie Ihre Daten kopieren möchten.
Führen Sie einen „list“-Befehl aus, um sicherzustellen, dass Ihr Container und Verzeichnis erstellt wurden.
hadoop fs -libjars $azjars \ -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \ -D fs.azure.account.key.<blob_service_endpoint>=<account_key> \ -ls -R wasb://<container_name>@<blob_service_endpoint>/
Ersetzen Sie den Platzhalter
<blob_service_endpoint>
durch den Namen Ihres Endpunkts des Blobdiensts.Ersetzen Sie den Platzhalter
<account_key>
durch den Zugriffsschlüssel Ihres Speicherkontos.Ersetzen Sie den Platzhalter
<container-name>
durch den Namen Ihres Containers.
Kopieren Sie Daten aus dem Hadoop-HDFS zum Data Box-Blobspeicher in den zuvor erstellten Container. Wenn das Verzeichnis, in das Sie kopieren möchten, nicht gefunden wurde, wird es vom Befehl automatisch erstellt.
hadoop distcp \ -libjars $azjars \ -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \ -D fs.azure.account.key.<blob_service_endpoint<>=<account_key> \ -filters <exclusion_filelist_file> \ [-f filelist_file | /<source_directory> \ wasb://<container_name>@<blob_service_endpoint>/<destination_directory>
Ersetzen Sie den Platzhalter
<blob_service_endpoint>
durch den Namen Ihres Endpunkts des Blobdiensts.Ersetzen Sie den Platzhalter
<account_key>
durch den Zugriffsschlüssel Ihres Speicherkontos.Ersetzen Sie den Platzhalter
<container-name>
durch den Namen Ihres Containers.Ersetzen Sie den Platzhalter
<exclusion_filelist_file>
durch den Namen der Datei, die Ihre Liste ausgeschlossener Dateien enthält.Ersetzen Sie den Platzhalter
<source_directory>
durch den Namen des Verzeichnisses, das die Daten enthält, die Sie kopieren möchten.Ersetzen Sie den Platzhalter
<destination_directory>
durch den Namen des Verzeichnisses, in das Sie Ihre Daten kopieren möchten.
Die Option
-libjars
wird verwendet, um die Dateihadoop-azure*.jar
und die abhängige Dateiazure-storage*.jar
fürdistcp
verfügbar zu machen. Dies kann für einige Cluster bereits erfolgt sein.Im folgenden Beispiel wird veranschaulicht, wie der Befehl
distcp
zum Kopieren von Daten verwendet wird.hadoop distcp \ -libjars $azjars \ -D fs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \ -D fs.azure.account.key.mystorageaccount.blob.mydataboxno.microsoftdatabox.com=myaccountkey \ -filter ./exclusions.lst -f /tmp/copylist1 -m 4 \ /data/testfiles \ wasb://hdfscontainer@mystorageaccount.blob.mydataboxno.microsoftdatabox.com/data
Erhöhen Sie die Kopiergeschwindigkeit wie folgt:
Versuchen Sie, die Anzahl von Zuordnungen zu ändern. (Die Standardanzahl der Zuordnungen beträgt 20. Im obigen Beispiel werden
m
= 4 Zuordnungen verwendet.)Probieren Sie
-D fs.azure.concurrentRequestCount.out=<thread_number>
aus. Ersetzen Sie<thread_number>
durch die Anzahl der Threads pro Zuordnung. Das Produkt aus der Anzahl der Zuordnungen und der Anzahl von Threads pro Zuordnung (m*<thread_number>
) sollte 32 nicht überschreiten.Versuchen Sie, mehrere
distcp
-Elemente parallel auszuführen.Beachten Sie hierbei, dass für große Dateien eine bessere Leistung als für kleine Dateien erzielt wird.
Wenn Dateien größer als 200 GB sind, empfehlen es sich, die Blockgröße mit den folgenden Parametern in 100 MB zu ändern:
hadoop distcp \ -libjars $azjars \ -Dfs.azure.write.request.size= 104857600 \ -Dfs.AbstractFileSystem.wasb.Impl=org.apache.hadoop.fs.azure.Wasb \ -Dfs.azure.account.key.<blob_service_endpoint<>=<account_key> \ -strategy dynamic \ -Dmapreduce.map.memory.mb=16384 \ -Dfs.azure.concurrentRequestCount.out=8 \ -Dmapreduce.map.java.opts=-Xmx8196m \ -m 4 \ -update \ /data/bigfile wasb://hadoop@mystorageaccount.blob.core.windows.net/bigfile
Senden des Data Box-Geräts an Microsoft
Führen Sie diese Schritte aus, um das Data Box-Gerät vorzubereiten und an Microsoft zu senden.
Bereiten Sie zunächst den Versand der Data Box oder Data Box Heavy vor.
Laden Sie die BOM-Dateien herunter, nachdem die Vorbereitung des Geräts abgeschlossen ist. Sie verwenden diese BOM-Dateien oder Manifestdateien später zur Überprüfung der in Azure hochgeladenen Daten.
Fahren Sie das Gerät herunter, und entfernen Sie die Kabel.
Planen Sie eine Abholung durch UPS.
Informationen zu Data Box-Geräten finden Sie unter "Ship your Data Box".
Informationen zu Data Box Heavy-Geräten finden Sie unter " Ship your Data Box Heavy".
Nachdem Ihr Gerät bei Microsoft eingegangen ist, wird es mit dem Netzwerk des Rechenzentrums verbunden, und die Daten werden in das Speicherkonto hochgeladen, das Sie bei der Bestellung des Geräts angegeben haben. Überprüfen Sie anhand der BOM-Dateien, ob Ihre gesamten Daten in Azure hochgeladen wurden.
Anwenden von Zugriffsberechtigungen auf Dateien und Verzeichnisse (nur Data Lake Storage)
Die Daten befinden sich bereits in Ihrem Azure Storage-Konto. Jetzt wenden Sie Zugriffsberechtigungen auf Dateien und Verzeichnisse an.
Hinweis
Dieser Schritt ist nur erforderlich, wenn Sie Azure Data Lake Storage als Datenspeicher verwenden. Falls Sie nur ein Blobspeicherkonto ohne hierarchischen Namespace als Datenspeicher nutzen, können Sie diesen Abschnitt überspringen.
Erstellen eines Dienstprinzipals für Ihr Konto mit aktiviertem Azure Data Lake Storage
Informationen zum Erstellen eines Dienstprinzipals finden Sie unter So verwenden Sie das Portal, um eine Microsoft Entra-Anwendung und einen Dienstprinzipal zu erstellen, die auf Ressourcen zugreifen können.
Achten Sie beim Ausführen der Schritte im Abschnitt Zuweisen der Anwendung zu einer Rolle des Artikels darauf, dem Dienstprinzipal die Rolle Mitwirkende Person an Storage-Blobdaten zuzuweisen.
Wenn Sie die Schritte im Abschnitt " Abrufen von Werten für die Anmeldung" des Artikels ausführen, speichern Sie Anwendungs-ID und geheime Clientschlüsselwerte in einer Textdatei. Sie benötigen sie bald.
Generieren einer Liste der kopierten Dateien mit deren Berechtigungen
Führen Sie im lokalen Hadoop-Cluster diesen Befehl aus:
sudo -u hdfs ./copy-acls.sh -s /{hdfs_path} > ./filelist.json
Dieser Befehl generiert eine Liste der kopierten Dateien mit deren Berechtigungen.
Hinweis
Abhängig von der Anzahl der Dateien im Hadoop Distributed File System (HDFS) kann das Ausführen dieses Befehls lange dauern.
Generieren einer Liste der Identitäten und Zuordnen dieser Identitäten zu Microsoft Entra-Identitäten
Laden Sie das Skript
copy-acls.py
herunter. Informationen hierzu finden Sie in diesem Artikel im Abschnitt Herunterladen von Hilfsskripts und Einrichten Ihres Edgeknotens, um sie auszuführen.Führen Sie den folgenden Befehl aus, um eine Liste der eindeutigen Identitäten zu generieren.
./copy-acls.py -s ./filelist.json -i ./id_map.json -g
Dieses Skript generiert eine Datei namens
id_map.json
, die die Identitäten enthält, die Sie für das Zuordnen zu AAD-basierten (Azure Active Directory) Identitäten benötigen.Öffnen Sie die Datei
id_map.json
in einem Text-Editor.Aktualisieren Sie für jedes JSON-Objekt, das in der Datei aufgeführt ist, das
target
-Attribut von entweder einem Microsoft Entra-Benutzerprinzipalnamen oder einer Objekt-ID (OID) mit der entsprechenden zugeordneten Identität. Wenn Sie damit fertig sind, speichern Sie die Datei. Sie benötigen diese Datei im nächsten Schritt.
Anwenden von Berechtigungen auf kopierte Dateien und Anwenden von Identitätszuordnungen
Führen Sie den folgenden Befehl aus, um Berechtigungen auf die Daten anzuwenden, die Sie in das Konto mit aktiviertem Data Lake Storage kopiert haben:
./copy-acls.py -s ./filelist.json -i ./id_map.json -A <storage-account-name> -C <container-name> --dest-spn-id <application-id> --dest-spn-secret <client-secret>
Ersetzen Sie den Platzhalter
<storage-account-name>
durch den Namen Ihres Speicherkontos.Ersetzen Sie den Platzhalter
<container-name>
durch den Namen Ihres Containers.Ersetzen Sie die Platzhalter
<application-id>
und<client-secret>
durch die Anwendungs-ID bzw. den geheimen Clientschlüssel, die Sie notiert haben, als Sie den Dienstprinzipal erstellt haben.
Anhang: Aufteilen von Daten auf mehrere Data Box-Geräte
Bevor Sie Ihre Daten auf ein Data Box-Gerät verschieben, müssen Sie einige Hilfsskripts herunterladen, sicherstellen, dass Ihre Daten so organisiert sind, dass sie auf ein Data Box-Gerät passen, und alle nicht benötigten Dateien ausschließen.
Herunterladen von Hilfsskripts und Einrichten Ihres Edgeknotens, um sie auszuführen
Führen Sie auf Ihrem Edge- oder Hauptknoten Ihres lokalen Hadoop-Clusters diesen Befehl aus:
git clone https://github.com/jamesbak/databox-adls-loader.git cd databox-adls-loader
Mit diesem Befehl wird das GitHub-Repository geklont, das die Hilfsskripts enthält.
Stellen Sie sicher, dass das jq-Paket auf Ihrem lokalen Computer installiert ist.
sudo apt-get install jq
Installieren Sie das Python-Paket "Requests ".
pip install requests
Legen Sie Ausführungsberechtigungen für die benötigten Skripts fest.
chmod +x *.py *.sh
Sicherstellen, dass Ihre Daten so organisiert sind, dass sie auf ein Data Box-Gerät passen
Wenn Ihr Datenvolumen die Größe eines einzelnen Data Box-Geräts überschreitet, können Sie Dateien in Gruppen aufteilen, die Sie auf mehreren Data Box-Geräten speichern können.
Wenn Ihre Daten die Größe eines einzelnen Data Box-Geräts nicht überschreiten, können Sie mit dem nächsten Abschnitt fortfahren.
Führen Sie mit erhöhten Rechten das Skript
generate-file-list
aus, das Sie entsprechend der Anleitung im vorherigen Abschnitt heruntergeladen haben.Nachstehend sind die Befehlsparameter beschrieben:
sudo -u hdfs ./generate-file-list.py [-h] [-s DATABOX_SIZE] [-b FILELIST_BASENAME] [-f LOG_CONFIG] [-l LOG_FILE] [-v {DEBUG,INFO,WARNING,ERROR}] path where: positional arguments: path The base HDFS path to process. optional arguments: -h, --help show this help message and exit -s DATABOX_SIZE, --databox-size DATABOX_SIZE The size of each Data Box in bytes. -b FILELIST_BASENAME, --filelist-basename FILELIST_BASENAME The base name for the output filelists. Lists will be named basename1, basename2, ... . -f LOG_CONFIG, --log-config LOG_CONFIG The name of a configuration file for logging. -l LOG_FILE, --log-file LOG_FILE Name of file to have log output written to (default is stdout/stderr) -v {DEBUG,INFO,WARNING,ERROR}, --log-level {DEBUG,INFO,WARNING,ERROR} Level of log information to output. Default is 'INFO'.
Kopieren Sie die generierten Dateilisten in HDFS, damit sie auf den DistCp-Auftrag zugreifen können.
hadoop fs -copyFromLocal {filelist_pattern} /[hdfs directory]
Ausschließen von nicht benötigten Dateien
Sie müssen einige Verzeichnisse aus dem „DisCp“-Auftrag ausschließen. Schließen Sie beispielsweise Verzeichnisse aus, die Statusinformationen enthalten, die für den Clusterbetrieb benötigt werden.
Erstellen Sie in dem lokalen Hadoop-Cluster, in dem Sie den DistCp-Auftrag ausführen möchten, eine Datei, die die Liste der Verzeichnisse enthält, die Sie ausschließen möchten.
Hier sehen Sie ein Beispiel:
.*ranger/audit.*
.*/hbase/data/WALs.*
Nächste Schritte
Informieren Sie sich darüber, wie Data Lake Storage mit HDInsight-Clustern funktioniert. Weitere Informationen finden Sie unter Verwenden von Azure Data Lake Storage mit Azure HDInsight-Clustern.