In diesem Leitfaden wird beschrieben, wie Sie Daten aus einem lokalen Hadoop Distributed File System (HDFS) zu Google Cloud verschieben können.
Dies ist der zweite von vier Leitfäden, in denen die Migration von lokalem Hadoop erläutert wird:
- Lokale Hadoop-Infrastruktur zu Google Cloud migrieren bietet einen Überblick über den Migrationsprozess, wobei der Schwerpunkt auf dem Wechsel von großen, nichtflüchtigen Clustern zu einem sitzungsspezifischen Modell liegt.
- Dieser Leitfaden konzentriert sich auf das Verschieben Ihrer Daten zu Google Cloud.
- Daten von HBase zu Bigtable migrieren
- Lokale Hadoop-Jobs zu Dataproc migrieren enthält Informationen zum Ausführen von Jobs in Dataproc und anderen Google Cloud-Produkten.
Datenmigration planen
In den folgenden Abschnitten finden Sie Best Practices für die Planung der Datenmigration aus einem lokalen HDFS zu Google Cloud. Planen Sie eine schrittweise Migration, damit Sie Zeit haben, Jobs zu migrieren und nach dem Verschieben jeder Datenmenge zu experimentieren und zu testen.
Möglichkeiten zum Verschieben der Daten
Es gibt zwei verschiedene Migrationsmodelle, die Sie bei der Übertragung von HDFS-Daten in die Cloud berücksichtigen sollten: Push und Pull. Beide Modelle verwenden Hadoop DistCp, um Daten aus Ihren lokalen HDFS-Clustern in Cloud Storage zu kopieren, nutzen jedoch unterschiedliche Ansätze.
Das Push-Modell ist das einfachste Modell: Der Quellcluster führt die distcp
-Jobs auf seinen Datenknoten aus und überträgt Dateien direkt an Cloud Storage, wie im folgenden Diagramm dargestellt:
Das Pull-Modell ist komplexer, hat aber einige Vorteile. Ein sitzungsspezifischer Dataproc-Cluster führt die distcp
-Jobs auf seinen Datenknoten aus, ruft Dateien aus dem Quellcluster ab und kopiert sie in Cloud Storage, wie im folgenden Diagramm dargestellt:
Push ist das einfachste Modell, da der Quellcluster Daten direkt in Cloud Storage verschieben kann und Sie keine zusätzlichen Rechenressourcen zum Ausführen der Kopie erstellen müssen. Wenn Sie den Quellcluster aber während der Migration für andere normale Datenverarbeitungsjobs weiterhin verwenden möchten, sollten Sie darauf achten, dass im Quellcluster genügend Ressourcen (z. B. CPU, RAM und Netzwerkbandbreite) verfügbar sind, um auch die Kopieraufträge auszuführen.
Wenn der Quellcluster schon mit der Rechenkapazität ausgeführt wird und Sie die Ressourcen im Quellcluster zum Ausführen der Kopie nicht erhöhen können, sollten Sie stattdessen das Pull-Modell verwenden.
Das Pull-Modell ist zwar komplexer als das Push-Modell, hat aber eine Reihe von Vorteilen:
- Die Auswirkungen auf die CPU- und RAM-Ressourcen des Quellclusters werden minimiert, da die Quellknoten nur zum Bereitstellen von Blöcken außerhalb des Clusters verwendet werden. Sie können auch die Ressourcenspezifikationen des Pull-Clusters in Google Cloud optimieren, um die Kopierjobs zu verarbeiten und den Pull-Cluster nach Abschluss der Migration zu bereinigen.
- Der Traffic im Netzwerk des Quellclusters wird reduziert, wodurch höhere ausgehende Bandbreiten und schnellere Übertragungen möglich sind.
- Der Cloud Storage-Connector muss nicht auf dem Quellcluster installiert werden, da die Datenübertragung zu Cloud Storage von dem sitzungsspezifischen Dataproc-Cluster übernommen wird, auf dem der Connector bereits installiert ist.
Beachten Sie, wie Hadoop die Datenreplikation in HDFS verarbeitet, um die Auswirkungen beider Modelle auf die Netzwerknutzung zu verstehen. Hadoop teilt jede Datei in mehrere Blöcke auf – die Blockgröße beträgt normalerweise 128–256 Megabyte. Hadoop repliziert diese Blöcke über mehrere Datenknoten und über mehrere Racks hinweg, um im Falle eines Datenknotenausfalls oder eines Rackfehlers Datenverluste zu vermeiden. Bei der Standardkonfiguration werden von jedem Block 3 Replikate gespeichert.
Hadoop verwendet auch "Rack-Awareness", die gewährleistet, dass zwei Kopien jedes Blocks in verschiedenen Datenknoten innerhalb des gleichen Racks für geringere Latenz und eine dritte Kopie in einem anderen Rack für erhöhte Redundanz und Verfügbarkeit angelegt werden. Diese Replikationslogik ist im folgenden Diagramm zusammengefasst:
Beim Kopieren einer Datei mithilfe des Push-Modells, wenn also die Zuordnungsaufgabe distcp
auf einem Datenknoten des Quellclusters ausgeführt wird, werden zuerst alle Dateiblöcke von den verschiedenen Datenknoten gesammelt. Die Blöcke der Datei werden dann aus dem Quellcluster nach Cloud Storage verschoben. Der Traffic im Netzwerk könnte fast doppelt so groß sein wie in der folgenden Abbildung dargestellt:
Wenn Sie eine Datei mit dem Pull-Modell kopieren, also die Zuordnungsaufgabe distcp
auf einem Datenknoten des Pull-Clusters in Google Cloud ausgeführt wird, verlässt jeder Block den Quellcluster direkt und wird nur einmal durch das Netzwerk geleitet. Der gesamte Netzwerktraffic ist auf die Gesamtgröße der Datei beschränkt, wie im folgenden Diagramm dargestellt:
Wenn Sie das Pull-Modell verwenden, sollten Sie die Anzahl der Zuordnungsaufgaben distcp
und die verwendete Bandbreite überwachen, um zu vermeiden, dass der Quellcluster mit zu vielen parallelen Verbindungen überlastet wird.
Migrationsziel bestimmen
Das Endergebnis Ihrer Hadoop-Migration kann eine cloudnative Lösung oder eine Hybridlösung sein. Der Unterschied zwischen diesen besteht darin, ob Ihr System lokale Komponenten beibehält. In einer cloudnativen Lösung speichern Sie Ihre Daten in der Cloud und führen dort Jobs aus. In einer Hybridlösung bleiben einige Ihrer Daten lokal gespeichert. Sie können Jobs für diese Daten auch lokal ausführen oder in der Cloud Jobs ausführen, die lokale Daten nutzen.
Eine cloudnative Lösung ist am einfachsten zu pflegen, aber Sie haben möglicherweise geschäftliche oder technische Anforderungen, die das lokale Speichern einiger Daten oder eine lokale Verarbeitung erfordern. Jede hybride Lösung ist sehr fallabhängig und besteht aus einer individuellen Kombination aus Technologien und Diensten, die auf Ihre Arbeitslastanforderungen abgestimmt ist.
Daten zu anderen Produkten als Cloud Storage verschieben
Wir empfehlen, den größten Teil Ihrer Daten in Cloud Storage vorzuhalten oder dorthin zu verschieben. Es gibt jedoch einige Fälle, in denen Sie möglicherweise Daten zu einem anderen Google Cloud-Produkt verschieben möchten:
Wenn Sie Daten von Apache HBase migrieren, ziehen Sie in Betracht, diese nach Bigtable zu verschieben, das ähnliche Funktionen bietet.
Wenn Sie Daten von Apache Impala migrieren, ist es eine gute Option, sie zu BigQuery zu verschieben, wo entsprechende Funktionen zur Verfügung stehen.
Möglicherweise haben Sie Daten in HBase oder Impala, die Sie verwenden können, ohne sie in Bigtable oder BigQuery zu speichern. Wenn Ihr Job nicht die Funktionen von Bigtable oder BigQuery erfordert, speichern Sie die Daten in Cloud Storage.
Datenspeicherorte mit Blick auf Berechtigungen planen
In Google Cloud werden für Dateien nicht die detaillierten Berechtigungen verwendet, die Ihnen ein lokales HDFS bietet. Der unkomplizierteste Ansatz für Dateiberechtigungen besteht darin, sie auf der Ebene der einzelnen Cloud Storage-Buckets festzulegen. Wenn Sie für verschiedene HDFS-Datasets unterschiedliche Berechtigungen festgelegt haben, sollten Sie auch in Cloud Storage verschiedene Buckets mit den jeweiligen Berechtigungen erstellen. Legen Sie dann die HDFS-Daten jeweils in dem Bucket ab, der die richtigen Berechtigungen für diese Daten hat.
Wenn Sie Dateien in eine Cloud Storage-Struktur verschieben, die sich von der im HDFS unterscheidet, sollten Sie alle Änderungen verfolgen. Zum Verschieben von Jobs nach Dataproc müssen Sie die richtigen Pfade zu den Daten an den neuen Speicherorten bereitstellen.
Inkrementelle Migration planen
Planen Sie, Ihre Daten im Verlauf der Zeit in einzelnen Blöcken zu verschieben. Planen Sie genügend Zeit ein, um zwischen Datenverschiebungen die entsprechenden Jobs in die Cloud zu verschieben. Beginnen Sie bei der Migration mit dem Verschieben von Daten niedriger Priorität, beispielsweise Sicherungen und Archive.
Daten aufteilen
Wenn Sie Ihre Daten inkrementell verschieben möchten, müssen Sie die Daten in mehrere Teile aufteilen. In den folgenden Abschnitten werden die gängigsten Strategien zum Aufteilen von Datasets beschrieben.
Daten nach Zeitstempel aufteilen
Ein gängiger Ansatz zum Aufteilen von Daten für eine inkrementelle Verschiebung besteht darin, ältere Daten in der Cloud zu speichern, während Ihre neuen Daten in Ihrem lokalen System in HDFS gespeichert werden. Dadurch können Sie neue und migrierte Jobs mit älteren, weniger wichtigen Daten testen. Wenn Sie Ihre Daten auf diese Weise aufteilen, können Sie Ihre Migration mit kleinen Datenmengen beginnen.
Wichtige Aspekte:
- Können Sie Ihre Daten – zusätzlich zur Zeitaufteilung – noch mit einer anderen Methode aufteilen? Sie können einen zielgerichteteren Satz von Daten erhalten, wenn Sie Daten zuerst nach den unterstützten Jobs oder der Organisation, die sie besitzt, aufteilen und dann nach Zeit.
- Sollten Sie eine absolute Kombination aus Datum/Uhrzeit oder eine relative Kombination aus Datum/Uhrzeit verwenden? Manchmal ist es sinnvoll, Daten nach bestimmten Zeitpunkten aufzuteilen, z. B. alle Daten zu archivieren, die vor einer wichtigen Änderung im System generiert wurden. Die Verwendung einer absoluten Kombination aus Datum/Uhrzeit ist oft sinnvoll, wenn Sie Backfill-Jobs ausführen möchten, um Ihr System in der Cloud zu testen und zu ermitteln, ob alte Daten den aktuellen Standards angepasst werden können. In anderen Fällen möchten Sie möglicherweise Daten basierend auf einem Zeitstempel relativ zum aktuellen Datum in die Cloud verschieben. Sie können beispielsweise alle Daten verschieben, die vor mehr als einem Jahr erstellt wurden, oder alle Daten, die in den letzten drei Monaten nicht bearbeitet wurden.
- Welchen Datum/Uhrzeit-Wert verwenden Sie, um die Entscheidung zu treffen? Dateien haben häufig mehrere Datum/Uhrzeit-Werte. Manchmal ist das Erstellungsdatum der Datei am wichtigsten. In anderen Fällen möchten Sie möglicherweise die Zeit der letzten Bearbeitung oder einen anderen Zeitstempel aus den Metadaten der Datei verwenden.
- Haben alle Ihre Daten das gleiche Zeitstempelformat? Es gibt viele Möglichkeiten, mit Zeitstempeln umzugehen. Wenn Ihre Daten aus mehr als einer Quelle stammen, ist es möglich, dass die Zeitstempel in verschiedenen Formaten gespeichert werden. Überprüfen Sie, ob die Zeitstempel konsistent sind, bevor Sie sie zum Aufteilen Ihrer Daten verwenden.
Daten nach Jobs aufteilen
Manchmal können Sie Ihre Daten anhand der Jobs aufteilen, von denen sie verwendet werden. Das kann besonders hilfreich sein, wenn Sie Jobs inkrementell migrieren. Sie können nur die Daten verschieben, die von den verschobenen Jobs verwendet werden.
Wichtige Aspekte:
- Sind die Jobs, die Sie in die Cloud verschieben, eigenständig? Das Aufteilen nach Jobs ist eine gute Option für Jobs, die in sich geschlossene Dateneinheiten nutzen. Die Verwaltung kann sich jedoch als schwierig erweisen, wenn die Jobs mit Daten arbeiten, die über das gesamte System verteilt sind.
- Werden die Daten in Zukunft wahrscheinlich dieselben Verwendungszwecke haben? Denken Sie vor dem Isolieren von Daten sorgfältig darüber nach, ob Sie sie womöglich auf andere Weise verwenden werden.
- Ist die Jobmigration angemessen, um verwaltbare Datenblöcke zu erhalten?
Sie können die Daten auch nach allgemeineren Funktionskriterien aufteilen als nur nach Gruppen von Jobs. Sie könnten beispielsweise alle Ihre ETL-Arbeitsschritte in der Cloud, Analyse- und Berichterstellungsjobs hingegen lokal ausführen.
Daten nach Inhaber aufteilen
In einigen Fällen können Sie Ihre Daten nach Inhaberschaft aufteilen. Ein Vorteil dieses Ansatzes besteht darin, dass Ihre Datenorganisation mit der Organisation Ihres Unternehmens übereinstimmt. Ein weiterer Vorteil ist, dass Sie die rollenbasierte Zugriffsverwaltung von Google Cloud nutzen können. Wenn Sie z. B. Daten, die von einer bestimmten Benutzerrolle verwendet werden, zu einem isolierten Cloud Storage-Bucket migrieren, können Sie die Berechtigungen leichter einrichten.
Wichtige Aspekte:
- Gibt es klare Grenzen zwischen den Inhabern? Es ist normalerweise klar, wer der primäre Inhaber eines bestimmten Datenelements ist. Manchmal sind die Personen, die am häufigsten auf Daten zugreifen, nicht die Inhaber.
- Gibt es andere Aufteilungskriterien, die Sie mit der Inhaberschaft kombinieren können? Nach der Aufteilung nach Inhaber könnten Sie sehr große Datasets erhalten. Es kann nützlich sein, eine weitere Eingrenzung vorzunehmen und die Daten zusätzlich nach Aufgabe oder Zeit aufzuteilen.
Synchronisierung von Daten in einer hybriden Lösung beibehalten
Eine der Herausforderungen bei der Verwendung einer hybriden Lösung besteht darin, dass ein Job mitunter auf Daten sowohl in Google Cloud als auch in lokalen Systemen zugreifen muss. Wenn der Zugriff auf ein Dataset aus beiden Umgebungen erforderlich ist, müssen Sie in einer Umgebung einen primären Speicherort für das Dataset einrichten und in der anderen eine synchronisierte Kopie anlegen und pflegen.
Die Herausforderungen beim Synchronisieren von Daten sind ähnlich, unabhängig vom primären Speicherort, den Sie auswählen. Sie benötigen eine Möglichkeit, um festzustellen, wenn sich Daten geändert haben, und einen Mechanismus, um Änderungen an die entsprechenden Kopien weiterzugeben. Wenn die Möglichkeit von Änderungskonflikten besteht, benötigen Sie außerdem eine Strategie, um diese zu lösen.
Wichtige Aspekte:
- Sie sollten Kopien von Daten nach Möglichkeit immer nur als schreibgeschützt erstellen. Ihre Synchronisierungsstrategie wird mit jeder potenziellen Quelle für neue Bearbeitungen komplexer.
- Vermeiden Sie in einer hybriden Lösung die Verwaltung von mehr als zwei Kopien von Daten. Behalten Sie jeweils nur eine lokale Kopie und eine Kopie in Google Cloud.
Sie können Technologien wie Apache Airflow verwenden, um die Datensynchronisierung zu verwalten.
Daten verschieben
In den folgenden Abschnitten werden Überlegungen zum Verschieben Ihrer Daten nach Google Cloud erläutert.
Datenzugriff konfigurieren
Dateiberechtigungen funktionieren in Cloud Storage anders als mit HDFS. Bevor Sie Daten nach Cloud Storage verschieben, müssen Sie sich mit Identity and Access Management (IAM) vertraut machen.
Der einfachste Ansatz für die Zugriffssteuerung besteht darin, Daten anhand der Zugriffsanforderungen in Cloud Storage-Buckets einzusortieren und Ihre Autorisierungsrichtlinien auf Bucket-Ebene zu konfigurieren. Sie können Rollen zuweisen, mit denen einzelnen Nutzern oder Gruppen Zugriff gewährt wird. Gewähren Sie den Zugriff nach Gruppen und weisen Sie Nutzer dann nach Bedarf diesen Gruppen zu. Sie müssen Entscheidungen hinsichtlich des Datenzugriffs treffen, wenn Sie Ihre Daten in Cloud Storage importieren und strukturieren.
Jedes Google Cloud-Produkt beinhaltet spezifische Berechtigungen und Rollen. Machen Sie sich mit den Beziehungen zwischen den Cloud Storage-Zugriffssteuerungen und jenen für Dataproc vertraut. Bewerten Sie die Richtlinien für jedes Produkt separat. Gehen Sie nicht davon aus, dass die Rollen und Berechtigungen direkt zwischen Produkten zugeordnet werden.
Machen Sie sich mit der folgenden Dokumentation vertraut, um sich auf richtlinienbezogene Entscheidungen für Ihr cloudbasiertes Hadoop-System vorzubereiten:
Cloud Storage unterstützt Zugriffssteuerungslisten (ACLs), wenn Sie für einzelne Dateien detailliertere Berechtigungen zuweisen müssen. IAM ist jedoch die stark bevorzugte Option. Verwenden Sie ACLs nur, wenn Ihre Berechtigungen besonders komplex sind.
DistCp zum Kopieren Ihrer Daten in Cloud Storage verwenden
Da es sich bei Cloud Storage um ein Hadoop-kompatibles Dateisystem handelt, können Sie Hadoop DistCp zum Verschieben Ihrer Daten vom lokalen HDFS nach Cloud Storage verwenden. Sie können Daten mithilfe von DistCp auf verschiedene Arten verschieben. Wir empfehlen diese Vorgehensweise:
Richten Sie mit Cloud Interconnect oder Cloud VPN eine private Verbindung zwischen Ihrem lokalen Netzwerk und dem Google-Netzwerk ein.
Erstellen Sie einen Dataproc-Cluster für die Datenübertragung.
Verwenden Sie die Google Cloud CLI, um eine Verbindung zur Masterinstanz Ihres Clusters herzustellen. Beispiel:
gcloud compute ssh [CLUSTER_NAME]-m
Dabei ist
CLUSTER_NAME
der Name des Dataproc-Clusters, den Sie für den Job erstellt haben. Das Suffix-m
identifiziert die Masterinstanz.Führen Sie auf der Masterinstanz des Clusters DistCp-Befehle aus, um die Daten zu verschieben.
Die DistCp-Befehle, die Sie zum Verschieben Ihrer Daten benötigen, ähneln Folgendem:
hadoop distcp hdfs://nn1:8020/20170202/ gs://bucket/20170202/
In diesem Beispiel sind nn1
und 8020
der NameNode und Port des Speicherorts Ihrer Quelldaten und bucket
der Name des Cloud Storage-Buckets, in den Sie die Datei kopieren.
Cloud Storage-Traffic ist standardmäßig mit Transport Layer Security (TLS) verschlüsselt.
Datenübertragungen überprüfen
Wenn Sie Daten zwischen verschiedenen Speichersystemen, wie mehreren HDFS-Clustern oder zwischen HDFS und Cloud Storage, kopieren oder verschieben, sollten Sie eine Art Validierung durchführen, um die Datenintegrität zu gewährleisten. Diese Validierung ist wichtig, um sicherzustellen, dass die Daten während der Übertragung nicht geändert wurden. Weitere Informationen finden Sie im Leitfaden Datenübertragungen überprüfen.
Anfragerate erhöhen
Cloud Storage verwaltet für jeden Bucket einen Index der jeweiligen Objektschlüssel, um eine konsistente Objektliste bereitzustellen. Dieser Index ist in lexikografischer Reihenfolge gespeichert und wird immer dann aktualisiert, wenn Objekte in einen Bucket geschrieben oder daraus gelöscht werden. Das Hinzufügen und Löschen von Objekten, deren Schlüssel innerhalb eines kleinen Indexbereichs liegen, führt zu einem höheren Konfliktrisiko.
Cloud Storage erkennt solche Konflikte und verteilt die Last des betroffenen Indexbereichs auf mehrere Server. Wenn Sie Objekte mit einem neuen Präfix schreiben und davon ausgehen, dass Sie eine Rate von mehr als 1.000 Schreibanfragen pro Sekunde erreichen, sollten Sie die Anfragerate, wie in der Cloud Storage-Dokumentation beschrieben, schrittweise erhöhen. Andernfalls können vorübergehend höhere Latenzzeiten und Fehlerraten auftreten.
Datenmigration beschleunigen
Am einfachsten können Sie Daten von Ihren lokalen Clustern mit einem VPN-Tunnel über das öffentliche Internet nach Google Cloud übertragen. Gewährleistet ein einzelner VPN-Tunnel nicht den benötigten Durchsatz, können Sie auch mehrere VPN-Tunnel erstellen. Google Cloud verteilt dann den Traffic automatisch auf diese Tunnel, um mehr Bandbreite bereitzustellen.
Manchmal bieten auch mehrere VPN-Tunnel keine ausreichende Bandbreite oder Verbindungsstabilität für die Anforderungen Ihrer Migration. Mithilfe der folgenden Ansätze können Sie den Durchsatz verbessern:
Verwenden Sie Direct Peering zwischen Ihrem Netzwerk und den Edge Points of Presence (PoPs) von Google. Mit dieser Option wird die Anzahl der Hops zwischen Ihrem Netzwerk und Google Cloud reduziert.
Verwenden Sie einen Cloud Interconnect-Dienstanbieter, um eine direkte Verbindung zum Google-Netzwerk herzustellen. Die Dienstdetails variieren je nach Partner. Die meisten bieten ein SLA für Netzwerkverfügbarkeit und Leistung. Für weitere Informationen wenden Sie sich direkt an einen Dienstanbieter.
Mit Google Cloud-Partnern zusammenarbeiten
Google Cloud arbeitet mit einer Vielzahl von Partnern zusammen, die Sie bei der Migration Ihrer Daten unterstützen können. Sehen Sie sich die mit Cloud Storage arbeitenden Partner an, um mehr über die für Ihre Datenmigration verfügbaren Dienste zu erfahren. Die verfügbaren Dienste und Bedingungen variieren je nach Anbieter. Wenden Sie sich also direkt an sie, um Details zu erhalten.
Weitere Informationen
Sehen Sie sich auch die anderen Abschnitte des Leitfadens für die Hadoop-Migration an:
Referenzarchitekturen, Diagramme und Best Practices zu Google Cloud kennenlernen. Weitere Informationen zu Cloud Architecture Center