Übertragung von HDFS zu Cloud Storage

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

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

Anwendungsfälle sind die Migration von einem lokalen Speicher zu Cloud Storage, das Archivieren von Daten, um lokalen Speicherplatz freizugeben, das Replizieren von Daten in Google Cloud für die Geschäftskontinuität oder die Übertragung von Daten zu 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, das für die Übertragung verwendet wird. Dies ist das Konto, das in der Google Cloud Console angemeldet ist, oder das Konto, das bei der Authentifizierung bei der gcloud CLI angegeben wird. Das Nutzerkonto kann ein reguläres Nutzerkonto oder ein vom Nutzer verwaltetes Dienstkonto sein.
Das von Google verwaltete Dienstkonto, auch als Dienst-Agent bezeichnet, das von 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 Übertragungs-Agent-Konto, das Google Cloud-Berechtigungen für Übertragungs-Agents gewährt. Transfer Agent-Konten verwenden zur Authentifizierung die Anmeldedaten des Nutzers, der sie installiert, oder die Anmeldedaten eines nutzerverwalteten Dienstkontos.

Eine Anleitung finden Sie unter Agent-basierte Übertragungsberechtigungen.

Agents in einem Agent-Pool installieren

Agent-basierte Übertragungen verwenden Software-Agents, um Übertragungen zu orchestrieren. Diese Agents müssen auf einem oder mehreren Computern mit Zugriff auf Ihr Dateisystem installiert sein. Agents müssen Zugriff auf den NameNode, alle Datanodes, den Hadoop Key Management Server (KMS) und das Kerberos Key Distribution Center (KDC) haben.

Übertragungs-Agents arbeiten in einem Agent-Pool zusammen. Die Erhöhung der Anzahl von Agents kann die Gesamtleistung des Jobs steigern, dies hängt jedoch von mehreren Faktoren ab.

  • Das Hinzufügen weiterer Agents kann Abhilfe schaffen – bis zu etwa der Hälfte der Knoten im HDFS-Cluster. Bei einem Cluster mit 30 Knoten sollte beispielsweise eine Erhöhung von 5 auf 15 Agents die Leistung verbessern, aber bei einem Cluster mit mehr als 15 ist es unwahrscheinlich, dass es einen großen Unterschied macht.

  • Bei einem kleinen HDFS-Cluster reicht unter Umständen ein Agent aus.

  • Zusätzliche Agents haben in der Regel einen größeren Einfluss auf die Leistung, wenn eine Übertragung eine große Anzahl kleiner Dateien enthält. Storage Transfer Service erzielt einen hohen Durchsatz durch die Parallelisierung von Übertragungsaufgaben zwischen mehreren Agents. Je mehr Dateien in der Arbeitslast enthalten sind, desto besser ist das Hinzufügen weiterer Agents.

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

Agent-Pool erstellen

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

Agents installieren

Agents im Agent-Pool installieren Verwenden Sie für diese Aktion Ihr Übertragungs-Agent-Konto .

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 Schema, NameNode und 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, gehen wir von RPC aus. Wenn kein Port angegeben ist, ist der Standardwert 8020 für RPC, 9870 für HTTP und 9871 für HTTPS. Der Eingabe-my-namenode wird beispielsweise zu rpc://my-namenode:8020.

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

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

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

Wenn Sie sich mit Kerberos authentifizieren, schließen Sie auch die folgenden Flags ein:

  • --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 das mit dem Flag --kerberos-user-principal angegebene Nutzerhauptkonto enthält. Beispiel: --kerberos-keytab-file=/home/me/kerberos/user1.keytab.

  • --kerberos-service-principal ist das zu verwendende Kerberos-Serviceprinzipal im Format <primary>/<instance>. Der Bereich wird über Ihre Kerberos-Konfigurationsdatei zugeordnet. Alle angegebenen Bereiche werden ignoriert. Wenn dieses Flag nicht angegeben ist, ist der Standardwert hdfs/<namenode_fqdn>, wobei <namenode_fqdn> der voll qualifizierte Domainname ist, der in der Konfigurationsdatei angegeben 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, auf die dem Agent Zugriff gewährt werden soll. Durch Weglassen dieses Flags wird das gesamte Dateisystem für den 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 zum Installieren von Docker.

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

Die erforderlichen Befehls-Flags hängen 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 Sie mehr als einen Agent auf diesem Computer ausführen.
  • --hdfs-namenode-uri: Ein Schema, ein NameNode und ein Port im URI-Format, der einen HDFS-Cluster darstellt. Beispiel:

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

Verwenden Sie HTTP oder HTTPS für WebHDFS. Wenn kein Schema angegeben ist, gehen wir von RPC aus. Wenn kein Port angegeben ist, ist der Standardwert 8020 für RPC, 9870 für HTTP und 9871 für HTTPS. Der Eingabe-my-namenode wird beispielsweise zu rpc://my-namenode:8020.

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

  • --kerberos-config-file: Pfad zu einer Kerberos-Konfigurationsdatei. Der Standardwert ist /etc/krb5.conf.
  • --kerberos-user-principal: Das Kerberos-Hauptkonto des Nutzers.
  • --kerberos-keytab-file: Pfad zu einer Keytab-Datei, die das mit --kerberos-user-principal angegebene Nutzerhauptkonto enthält.
  • --kerberos-service-principal: zu verwendendes Kerberos-Dienstprinzipal im Format „Dienst/Instanz“. Der Bereich wird über Ihre Kerberos-Konfigurationsdatei zugeordnet. Alle angegebenen Bereiche werden ignoriert. Wenn dieses Flag nicht angegeben ist, ist der Standardwert hdfs/<namenode_fqdn>, 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 beim Herstellen einer Verbindung zu einem HDFS-Cluster über die einfache Authentifizierung verwendet werden soll.
  • --hdfs-namenode-uri: Ein Schema, ein NameNode und ein Port im URI-Format, der einen HDFS-Cluster darstellt. Beispiel:
    • rpc://my-namenode:8020
    • http://my-namenode:9870

Verwenden Sie HTTP oder HTTPS für WebHDFS. Wenn kein Schema angegeben ist, gehen wir von RPC aus. Wenn kein Port angegeben ist, ist der Standardwert 8020 für RPC, 9870 für HTTP und 9871 für HTTPS. Der Eingabe-my-namenode wird beispielsweise zu rpc://my-namenode:8020.

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

Keine Authentifizierung

So stellen Sie ohne Authentifizierung eine Verbindung zu Ihrem Dateisystem 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, der einen HDFS-Cluster darstellt. Beispiel:
    • rpc://my-namenode:8020
    • http://my-namenode:9870

Verwenden Sie HTTP oder HTTPS für WebHDFS. Wenn kein Schema angegeben ist, gehen wir von RPC aus. Wenn kein Port angegeben ist, ist der Standardwert 8020 für RPC, 9870 für HTTP und 9871 für HTTPS. Der Eingabe-my-namenode wird beispielsweise zu rpc://my-namenode:8020.

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

Übertragungsoptionen

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

Aus HDFS übertragene Dateien behalten ihre Metadaten nicht bei.

Ü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 Google-interne Systeme außerhalb Ihres Projekts bereitgestellt werden.

Storage Transfer Service bietet mehrere Schnittstellen, über die Übertragungen erstellt werden können.

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 Hadoop Distributed File System als Quelltyp 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 für die Übertragung relativ zum Stammverzeichnis ein.

  2. Geben Sie optional Filter an, die auf die Quelldaten angewendet werden sollen.

  3. Klicken Sie auf Next step (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. Klicken Sie zum Erstellen eines neuen Buckets auf Bucket-Symbol Neuen Bucket erstellen.

  2. Klicken Sie auf Next step (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 Next step (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 Ihre Cloud Storage-Speicherklasse aus und legen Sie fest, ob der Erstellungszeitpunkt der einzelnen Objekte gespeichert werden soll. Weitere Informationen finden Sie unter Metadaten beibehalten.

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

    • Nie: Zieldateien werden nicht überschrieben. Wenn eine Datei mit demselben Namen existiert, 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 das Übertragungs-Logging 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 aus. Der NameNode und der Port des Clusters werden auf Agent-Ebene konfiguriert, sodass im Befehl zur Joberstellung nur der (optionale) Pfad und der Agent-Pool angegeben werden müssen.

  • --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 der Quelle angegeben haben, beziehen sich die Präfixfilter auf diesen Ordner. Weitere Informationen finden Sie unter Quellobjekte nach Präfix filtern.

  • Übertragungsoptionen: Geben Sie an, ob Zieldateien (--overwrite-when=different oder always) überschrieben werden sollen und ob bestimmte Dateien während oder nach der Übertragung gelöscht werden sollen (--delete-from=destination-if-unique oder source-after-transfer) und 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

Zum Erstellen einer Übertragung aus einer HDFS-Quelle mithilfe der REST API erstellen Sie ein JSON-Objekt ähnlich dem folgenden Beispiel.

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 weiteren unterstützten Feldern finden Sie in der Referenz zu transferJobs.create.

Cluster mit mehreren NameNodes

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

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

Der aktive NameNode des Clusters kann mit folgendem Befehl abgerufen werden:

hdfs haadmin -getAllServiceState