Übertragung von HDFS zu Cloud Storage

Storage Transfer Service unterstützt Übertragungen aus Cloud- und lokalen Hadoop Distributed File System-Quellen (HDFS).

Für Übertragungen von HDFS muss Cloud Storage als Ziel verwendet werden.

Anwendungsfälle sind die Migration von lokalem Speicher zu Cloud Storage, das Archivieren von Daten, um lokalen Speicherplatz freizugeben, die Replikation von Daten in Google Cloud zur Geschäftskontinuität oder die Übertragung von Daten in Google Cloud zur Analyse und Verarbeitung.

Berechtigungen konfigurieren

Bevor Sie eine Übertragung erstellen, müssen Sie Berechtigungen für die folgenden Entitäten konfigurieren:

Das Nutzerkonto, mit dem die Übertragung erstellt wird. Das ist das Konto, mit dem Sie in der Google Cloud Console angemeldet sind, oder das Konto, das bei der Authentifizierung in der gcloud CLI angegeben wird. Das Nutzerkonto kann ein reguläres Nutzerkonto oder ein nutzerverwaltetes Dienstkonto sein.
Das von Google verwaltete Dienstkonto, auch als Dienst-Agent bezeichnet, das vom Storage Transfer Service verwendet wird. Dieses Konto wird in der Regel anhand seiner E-Mail-Adresse identifiziert, die das Format project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com hat.
Das Konto des Migrations-Agents, das Google Cloud-Berechtigungen für Migrations-Agents bereitstellt. Für die Authentifizierung von Transfer-Agent-Konten werden die Anmeldedaten des Nutzers verwendet, der sie installiert, oder die Anmeldedaten eines nutzerverwalteten Dienstkontos.

Eine Anleitung finden Sie unter Agentbasierte Berechtigungen für die Weiterleitung.

Agents in einem Agent-Pool installieren

Bei agentbasierten Übertragungen werden Software-Agents verwendet, um Übertragungen zu orchestrieren. Diese Agents müssen auf einem oder mehreren Computern mit Zugriff auf Ihr Dateisystem installiert werden. Die Agents müssen Zugriff auf den Namenode, alle Datanodes, den Hadoop Key Management Server (KMS) und das Kerberos Key Distribution Center (KDC) haben.

Transfer-Kundenservicemitarbeiter arbeiten in einem Kundenservicemitarbeiterpool zusammen. Die Erhöhung der Anzahl der Kundenservicemitarbeiter kann die Gesamtleistung des Jobs verbessern. Dies hängt jedoch von mehreren Faktoren ab.

  • Es kann helfen, mehr Agenten hinzuzufügen, bis zu etwa der Hälfte der Anzahl der Knoten in Ihrem HDFS-Cluster. Bei einem Cluster mit 30 Knoten sollte die Leistung beispielsweise durch eine Erhöhung von 5 auf 15 Agenten verbessert werden. Bei mehr als 15 Agenten ist jedoch kaum ein Unterschied zu erwarten.

  • Für einen kleinen HDFS-Cluster ist möglicherweise ein Agent ausreichend.

  • Zusätzliche Agenten wirken sich in der Regel stärker auf die Leistung aus, wenn eine Übertragung eine große Anzahl kleiner Dateien umfasst. Der Storage Transfer Service erreicht einen hohen Durchsatz, indem Übertragungsaufgaben parallel auf mehrere Agenten verteilt werden. Je mehr Dateien in der Arbeitslast vorhanden sind, desto vorteilhafter ist es, weitere Agents hinzuzufügen.

Der Name des Kundenservicemitarbeiterpools oder das Präfix der Kundenservicemitarbeiter-ID darf keine vertraulichen Informationen wie personenidentifizierbare Informationen oder Sicherheitsdaten enthalten. Ressourcennamen können an die Namen anderer Google Cloud-Ressourcen weitergegeben und für interne Google-Systeme außerhalb Ihres Projekts freigegeben werden.

Agent-Pool erstellen

Erstellen Sie einen Agent-Pool. Verwenden Sie für diese Aktion Ihr Nutzerkonto Symbol für Nutzerkonto.

Agents installieren

Installieren Sie Agents im Agent-Pool. Verwenden Sie für diese Aktion Ihr Konto für den Kundenservicemitarbeiter für die Übertragung .

Google Cloud Console

  1. Rufen Sie in der Google Cloud Console die Seite Agent-Pools auf.

    Zu „Agent-Pools“

  2. Wählen Sie den Agent-Pool aus, dem Sie den neuen Agent hinzufügen möchten.

  3. Klicken Sie auf Agent installieren.

  4. Folgen Sie der Anleitung, um den Agent zu installieren und auszuführen.

    Weitere Informationen zu den Befehlszeilenoptionen des Agents finden Sie unter Agent-Befehlszeilenoptionen.

gcloud-CLI

Wenn Sie einen oder mehrere Agents mithilfe der gcloud CLI installieren möchten, führen Sie gcloud transfer agents install aus:

gcloud transfer agents install --pool=POOL_NAME \
  --count=NUM_AGENTS \
  --mount-directories=MOUNT_DIRECTORIES \
  --hdfs-namenode-uri=HDFS_NAMENODE_URI \
  --hdfs-username=HDFS_USERNAME \
  --hdfs-data-transfer-protection=HDFS_DATA_TRANSFER_PROTECTION \
  --kerberos-config-file=KERBEROS_CONFIG_FILE \
  --kerberos-keytab-file=KERBEROS_KEYTAB_FILE \
  --kerberos-user-principal=KERBEROS_USER_PRINCIPAL \
  --kerberos-service-principal=KERBEROS_SERVICE_PRINCIPAL \

Wobei:

  • --hdfs-namenode-uri gibt einen HDFS-Cluster mit einem Schema, einem Namenode und einem Port im URI-Format an. Beispiel:

    • rpc://my-namenode:8020
    • http://my-namenode:9870

    Verwenden Sie HTTP oder HTTPS für WebHDFS. Wenn kein Schema angegeben ist, wird RPC angenommen. Wenn kein Port angegeben ist, wird standardmäßig 8020 für RPC, 9870 für HTTP und 9871 für HTTPS verwendet. Aus der Eingabe my-namenode wird beispielsweise rpc://my-namenode:8020.

    Wenn Ihr Cluster mit mehreren Namensknoten konfiguriert ist, geben Sie den aktuellen primären Knoten an. Weitere Informationen finden Sie unter Cluster mit mehreren Namenoden.

  • --hdfs-username ist der Nutzername für die Verbindung zu einem HDFS-Cluster mit einfacher Authentifizierung. Lassen Sie dieses Flag weg, wenn Sie sich mit Kerberos authentifizieren oder eine Verbindung ohne Authentifizierung herstellen.

  • --hdfs-data-transfer-protection (optional) ist die clientseitige QOP-Einstellung (Quality of Protection) für Kerberos-Cluster. Der Wert darf nicht strenger sein als der serverseitige QOP-Wert. Gültige Werte sind authentication, integrity und privacy.

Wenn Sie sich mit Kerberos authentifizieren, fügen Sie auch die folgenden Flags hinzu:

  • --kerberos-config-file ist der Pfad zu einer Kerberos-Konfigurationsdatei. Beispiel: --kerberos-config-file=/etc/krb5.conf

  • --kerberos-user-principal ist das zu verwendende Kerberos-Nutzerprinzipal. Beispiel: --kerberos-user-principal=user1

  • --kerberos-keytab-file ist der Pfad zu einer Keytab-Datei, die die mit dem Flag --kerberos-user-principal angegebene Nutzerprincipal enthält. Beispiel: --kerberos-keytab-file=/home/me/kerberos/user1.keytab.

  • --kerberos-service-principal ist der zu verwendende Kerberos-Dienstprinzipal vom Typ <primary>/<instance>. Der Bereich wird aus Ihrer Kerberos-Konfigurationsdatei zugeordnet. Ein angegebener Bereich wird ignoriert. Wenn dieses Flag nicht angegeben ist, ist der Standardwert hdfs/<namenode_fqdn>, wobei <namenode_fqdn> der in der Konfigurationsdatei angegebene voll qualifizierte Domainname ist.

    Beispiel: --kerberos-service-principal=hdfs/my-namenode.a.example.com

Das Tool führt Sie durch die erforderlichen Schritte zur Installation des Agents. Dieser Befehl installiert NUM_AGENTS Agents auf Ihrem Computer, die dem Poolnamen angegeben als POOL_NAME zugeordnet sind und authentifiziert die Agents mithilfe Ihrer gcloud-Anmeldedaten. Der Poolname muss vorhanden sein oder ein Fehler wird zurückgegeben.

Das Flag --mount-directories ist optional, wird aber dringend empfohlen. Der Wert ist eine durch Kommas getrennte Liste von Verzeichnissen im Dateisystem, für die dem Kundenservicemitarbeiter Zugriff gewährt werden soll. Wenn Sie dieses Flag weglassen, wird das gesamte Dateisystem im Agent-Container bereitgestellt. Weitere Informationen finden Sie in der Referenz zu gcloud.

docker run

Bevor Sie docker run zum Installieren von Agents verwenden, folgen Sie der Anleitung zur Installation von Docker.

Mit dem Befehl docker run wird ein Agent installiert. Wenn Sie die Anzahl der Kundenservicemitarbeiter in Ihrem Pool erhöhen möchten, führen Sie diesen Befehl so oft aus, wie erforderlich.

Welche Befehlsflags erforderlich sind, hängt vom verwendeten Authentifizierungstyp ab.

Kerberos

Verwenden Sie den folgenden Befehl, um sich mit Kerberos bei Ihrem Dateisystem zu authentifizieren:

sudo docker run -d --ulimit memlock=64000000 --rm \
  --network=host \
  -v /:/transfer_root \
  gcr.io/cloud-ingest/tsop-agent:latest \
  --enable-mount-directory \
  --project-id=${PROJECT_ID} \
  --hostname=$(hostname) \
  --creds-file="service_account.json" \
  --agent-pool=${AGENT_POOL_NAME} \
  --hdfs-namenode-uri=cluster-namenode \
  --kerberos-config-file=/etc/krb5.conf \
  --kerberos-user-principal=user \
  --kerberos-keytab-file=/path/to/folder.keytab

Wobei:

  • --network=host sollte weggelassen werden, wenn auf diesem Computer mehrere Kundenservicemitarbeiter ausgeführt werden.
  • --hdfs-namenode-uri: Ein Schema, ein Namenode und ein Port im URI-Format, die einen HDFS-Cluster darstellen. Beispiel:

    • rpc://my-namenode:8020
    • http://my-namenode:9870

Verwenden Sie HTTP oder HTTPS für WebHDFS. Wenn kein Schema angegeben ist, wird RPC angenommen. Wenn kein Port angegeben ist, wird standardmäßig 8020 für RPC, 9870 für HTTP und 9871 für HTTPS verwendet. Aus der Eingabe my-namenode wird beispielsweise rpc://my-namenode:8020.

Wenn Ihr Cluster mit mehreren Namensknoten konfiguriert ist, geben Sie den aktuellen primären Knoten an. Weitere Informationen finden Sie unter Cluster mit mehreren Namenoden.

  • --kerberos-config-file: Pfad zu einer Kerberos-Konfigurationsdatei. Standardmäßig ist /etc/krb5.conf festgelegt.
  • --kerberos-user-principal: Das Kerberos-Nutzerprinzipal.
  • --kerberos-keytab-file: Pfad zu einer Keytab-Datei, die die mit --kerberos-user-principal angegebene Nutzerprincipal enthält.
  • --kerberos-service-principal: Zu verwendender Kerberos-Dienstprinzipal in der Form „service/instance“. Der Bereich wird aus Ihrer Kerberos-Konfigurationsdatei zugeordnet. Ein angegebener Bereich wird ignoriert. Wenn dieses Flag nicht angegeben ist, wird standardmäßig hdfs/<namenode_fqdn> verwendet, wobei fqdn der voll qualifizierte Domainname ist.

Einfache Authentifizierung

So authentifizieren Sie sich mit der einfachen Authentifizierung bei Ihrem Dateisystem:

sudo docker run -d --ulimit memlock=64000000 --rm \
  --network=host \
  -v /:/transfer_root \
  gcr.io/cloud-ingest/tsop-agent:latest \
  --enable-mount-directory \
  --project-id=${PROJECT_ID} \
  --hostname=$(hostname) \
  --creds-file="${CREDS_FILE}" \
  --agent-pool="${AGENT_POOL_NAME}" \
  --hdfs-namenode-uri=cluster-namenode \
  --hdfs-username="${USERNAME}"

Wobei:

  • --hdfs-username: Nutzername, der bei der Verbindung mit einem HDFS-Cluster mit einfacher Authentifizierung verwendet werden soll.
  • --hdfs-namenode-uri: Ein Schema, ein Namenode und ein Port im URI-Format, die einen HDFS-Cluster darstellen. Beispiel:
    • rpc://my-namenode:8020
    • http://my-namenode:9870

Verwenden Sie HTTP oder HTTPS für WebHDFS. Wenn kein Schema angegeben ist, wird RPC angenommen. Wenn kein Port angegeben ist, wird standardmäßig 8020 für RPC, 9870 für HTTP und 9871 für HTTPS verwendet. Aus der Eingabe my-namenode wird beispielsweise rpc://my-namenode:8020.

Wenn Ihr Cluster mit mehreren Namensknoten konfiguriert ist, geben Sie den aktuellen primären Knoten an. Weitere Informationen finden Sie unter Cluster mit mehreren Namenoden.

Keine Authentifizierung

So stellen Sie eine Verbindung zu Ihrem Dateisystem ohne Authentifizierung her:

sudo docker run -d --ulimit memlock=64000000 --rm \
  --network=host \
  -v /:/transfer_root \
  gcr.io/cloud-ingest/tsop-agent:latest \
  --enable-mount-directory \
  --project-id=${PROJECT_ID} \
  --hostname=$(hostname) \
  --creds-file="${CREDS_FILE}" \
  --agent-pool="${AGENT_POOL_NAME}" \
  --hdfs-namenode-uri=cluster-namenode \

Wobei:

  • --hdfs-namenode-uri: Ein Schema, ein Namenode und ein Port im URI-Format, die einen HDFS-Cluster darstellen. Beispiel:
    • rpc://my-namenode:8020
    • http://my-namenode:9870

Verwenden Sie HTTP oder HTTPS für WebHDFS. Wenn kein Schema angegeben ist, wird RPC angenommen. Wenn kein Port angegeben ist, wird standardmäßig 8020 für RPC, 9870 für HTTP und 9871 für HTTPS verwendet. Aus der Eingabe my-namenode wird beispielsweise rpc://my-namenode:8020.

Wenn Ihr Cluster mit mehreren Namensknoten konfiguriert ist, geben Sie den aktuellen primären Knoten an. Weitere Informationen finden Sie unter Cluster mit mehreren Namenoden.

Übertragungsoptionen

Die folgenden Storage Transfer Service-Funktionen sind für Übertragungen von HDFS nach Cloud Storage verfügbar.

Bei der Übertragung von HDFS werden die Metadaten der Dateien nicht beibehalten.

Übertragung erstellen

Der Name des Übertragungsjobs darf keine vertraulichen Informationen wie personenidentifizierbare Informationen oder Sicherheitsdaten enthalten. Ressourcennamen können an die Namen anderer Google Cloud-Ressourcen weitergegeben und für interne Google-Systeme außerhalb Ihres Projekts freigegeben werden.

Der Storage Transfer Service bietet mehrere Schnittstellen, über die eine Übertragung erstellt werden kann.

Google Cloud Console

  1. Rufen Sie in der Google Cloud Console die Seite Storage Transfer Service auf.

    Storage Transfer Service aufrufen

  2. Klicken Sie auf Übertragung erstellen. Die Seite Übertragungsjob erstellen wird angezeigt.

  3. Wählen Sie als Quelltyp Hadoop Distributed File System aus. Das Ziel muss Google Cloud Storage sein.

    Klicken Sie auf Next step (Nächster Schritt).

Quelle konfigurieren

  1. Geben Sie die erforderlichen Informationen für diese Übertragung an:

    1. Wählen Sie den Agent-Pool aus, den Sie für diese Übertragung konfiguriert haben.

    2. Geben Sie den Pfad ein, von dem aus die Übertragung erfolgen soll, relativ zum Stammverzeichnis.

  2. Optional können Sie Filter angeben, die auf die Quelldaten angewendet werden sollen.

  3. Klicken Sie auf Nächster Schritt.

Senke konfigurieren

  1. Geben Sie im Feld Bucket oder Ordner den Ziel-Bucket und optional den Ordnernamen ein. Sie können auch auf Durchsuchen klicken, um einen Bucket aus einer Liste der vorhandenen Buckets im aktuellen Projekt auszuwählen. Wenn Sie einen neuen Bucket erstellen möchten, klicken Sie auf Bucket-Symbol Neuen Bucket erstellen.

  2. Klicken Sie auf Nächster Schritt.

Übertragung planen

Sie können Ihre Übertragung für die einmalige Ausführung planen oder eine wiederkehrende Übertragung konfigurieren.

Klicken Sie auf Nächster Schritt.

Übertragungseinstellungen auswählen

  1. Geben Sie im Feld Beschreibung eine Beschreibung der Übertragung ein. Geben Sie als Best Practice eine aussagekräftige Beschreibung ein, damit Sie die Jobs unterscheiden können.

  2. Wählen Sie unter Metadatenoptionen die Cloud Storage-Speicherklasse und aus, ob die Erstellungszeit jedes Objekts gespeichert werden soll. Weitere Informationen finden Sie unter Metadatenaufbewahrung.

  3. Wählen Sie unter Wann überschreiben? eine der folgenden Optionen aus:

    • Nie: Zieldateien werden nicht überschrieben. Wenn bereits eine Datei mit demselben Namen vorhanden ist, wird sie nicht übertragen.

    • Falls unterschiedlich: Überschreibt Zieldateien, wenn die Quelldatei mit demselben Namen unterschiedliche ETags oder Prüfsummenwerte hat.

    • Immer: Zieldateien werden immer geschrieben, wenn die Quelldatei denselben Namen hat, auch wenn sie identisch sind.

  4. Wählen Sie unter Löschzeitpunkt eine der folgenden Optionen aus:

    • Nie: Dateien werden niemals aus der Quelle oder dem Ziel gelöscht.

    • Dateien aus dem Ziel löschen, wenn sie nicht auch in der Quelle sind: Wenn sich Dateien im Cloud Storage-Ziel-Bucket nicht auch in der Quelle befinden, löschen Sie die Dateien aus dem Cloud Storage-Bucket.

      Mit dieser Option wird sichergestellt, dass der Cloud Storage-Ziel-Bucket genau mit Ihrer Quelle übereinstimmt.

  5. Wählen Sie aus, ob Übertragungsprotokollierung und/oder Pub/Sub-Benachrichtigungen aktiviert werden sollen.

Klicken Sie auf Erstellen, um die Übertragung zu erstellen.

gcloud-CLI

Verwenden Sie zum Erstellen eines neuen Übertragungsjobs den Befehl gcloud transfer jobs create. Das Erstellen eines neuen Jobs initiiert die angegebene Übertragung, sofern weder ein Zeitplan noch --do-not-run angegeben ist.

gcloud transfer jobs create \
  hdfs:///PATH/ gs://BUCKET_NAME/PATH/
  --source-agent-pool=AGENT_POOL_NAME

Wobei:

  • PATH ist ein absoluter Pfad vom Stammverzeichnis des HDFS-Clusters. Der Cluster-Namenode und der Port werden auf Agentebene konfiguriert. Daher müssen im Befehl zum Erstellen des Jobs nur der (optionale) Pfad und der Agent-Pool angegeben werden.

  • --source-agent-pool gibt den für diese Übertragung zu verwendenden Quell-Agent-Pool an.

Weitere Optionen:

  • --do-not-run verhindert, dass Storage Transfer Service nach dem Senden des Befehls den Job ausführt. Zum Ausführen des Jobs aktualisieren Sie ihn, um einen Zeitplan hinzuzufügen, oder verwenden jobs run, um ihn manuell zu starten.

  • --manifest-file gibt den Pfad zu einer CSV-Datei in Cloud Storage an, die eine Liste der Dateien enthält, die von Ihrer Quelle übertragen werden sollen. Informationen zur Formatierung von Manifestdateien finden Sie unter Bestimmte Dateien oder Objekte mithilfe eines Manifests übertragen.

  • Jobinformationen: Sie können --name und --description angeben.

  • Zeitplan: Geben Sie --schedule-starts, --schedule-repeats-every und --schedule-repeats-until oder --do-not-run an.

  • Objektbedingungen: Mit Bedingungen können Sie bestimmen, welche Objekte übertragen werden. Dazu gehören --include-prefixes und --exclude-prefixes sowie die zeitbasierten Bedingungen in --include-modified-[before | after]-[absolute | relative]. Wenn Sie einen Ordner mit Ihrer Quelle angegeben haben, sind Präfixfilter relativ zu diesem Ordner. Weitere Informationen finden Sie unter Quellobjekte nach Präfix filtern.

  • Übertragungsoptionen: Geben Sie an, ob Zieldateien überschrieben werden sollen (--overwrite-when=different oder always) und ob bestimmte Dateien während oder nach der Übertragung gelöscht werden sollen (--delete-from=destination-if-unique oder source-after-transfer). Legen Sie optional eine Speicherklasse für übertragene Objekte fest (--custom-storage-class).

  • Benachrichtigungen: Konfigurieren Sie Pub/Sub-Benachrichtigungen für Übertragungen mit --notification-pubsub-topic, --notification-event-types und --notification-payload-format.

Führen Sie gcloud transfer jobs create --help aus oder sehen Sie sich die gcloud-Referenzdokumentation an, um alle Optionen aufzurufen.

REST API

Erstellen Sie ein JSON-Objekt ähnlich dem folgenden Beispiel, um eine Übertragung von einer HDFS-Quelle mithilfe der REST API zu erstellen.

POST https://storagetransfer.googleapis.com/v1/transferJobs
{
  ...
  "transferSpec": {
    "source_agent_pool_name":"POOL_NAME",
    "hdfsDataSource": {
      "path": "/mount"
    },
    "gcsDataSink": {
      "bucketName": "SINK_NAME"
    },
    "transferOptions": {
      "deleteObjectsFromSourceAfterTransfer": false
    }
  }
}

Weitere Informationen zu zusätzlichen unterstützten Feldern finden Sie in der Referenz zu transferJobs.create.

Cluster mit mehreren Namensknoten

Storage Transfer Service-Agents können nur mit einem einzelnen Namenode konfiguriert werden. Wenn Ihr HDFS-Cluster mit mehreren Namenoden („Hochverfügbarkeit“) konfiguriert ist und es zu einem Failover-Ereignis kommt, das zu einem neuen primären Namenode führt, müssen Sie Ihre Agenten mit dem richtigen Namenode neu installieren.

Informationen zum Löschen der alten Kundenservicemitarbeiter finden Sie unter Kundenservicemitarbeiter löschen.

Sie können den aktiven Namenode Ihres Clusters mit dem folgenden Befehl abrufen:

hdfs haadmin -getAllServiceState