Übertragung von HDFS zu Cloud Storage

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

Bei Übertragungen aus HDFS muss Cloud Storage als Ziel verwendet werden.

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

Berechtigungen konfigurieren

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

Das Nutzerkonto, das zum Erstellen der Übertragung verwendet wird. Dies ist das Konto, mit dem Sie in der Google Cloud Console angemeldet sind, oder das Konto, das bei der Authentifizierung in der `gcloud`-Befehlszeile 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 von Storage Transfer Service verwendet wird. Dieses Konto wird in der Regel durch seine E-Mail-Adresse im Format project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com identifiziert.
Das Transfer-Agent-Konto, das Google Cloud-Berechtigungen für Transfer-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 Berechtigungen für die agentbasierte Übertragung.

Agents in einem Agent-Pool installieren

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

Transfer-Agents arbeiten in einem Agent-Pool zusammen. Wenn Sie die Anzahl der Agents erhöhen, kann sich die Gesamtleistung des Jobs verbessern. Das hängt jedoch von mehreren Faktoren ab.

  • Das Hinzufügen weiterer Agents kann helfen, bis etwa zur Hälfte der Anzahl der Knoten in Ihrem HDFS-Cluster. Bei einem Cluster mit 30 Knoten sollte eine Erhöhung von 5 auf 15 Agents die Leistung verbessern. Eine weitere Erhöhung über 15 hinaus wird jedoch wahrscheinlich keinen großen Unterschied machen.

  • Für einen kleinen HDFS-Cluster kann ein Agent ausreichen.

  • Zusätzliche Agents haben in der Regel einen größeren Einfluss auf die Leistung, wenn bei einer Übertragung eine große Anzahl kleiner Dateien enthalten ist. Storage Transfer Service erzielt einen hohen Durchsatz, indem Übertragungsaufgaben auf mehrere Agents parallelisiert werden. Je mehr Dateien in der Arbeitslast enthalten sind, desto mehr profitieren Sie von zusätzlichen Agents.

Der Name des Agent-Pools oder das Präfix der Agent-ID darf keine vertraulichen Informationen wie personenidentifizierbare Informationen (PII) oder Sicherheitsdaten enthalten. Ressourcennamen können an die Namen anderer Google Cloud-Ressourcen weitergegeben und in Google-internen Systemen außerhalb Ihres Projekts verfügbar gemacht werden.

Agent-Pool erstellen

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

Agents installieren

Installieren Sie Agents im Agent-Pool. Verwenden Sie für diese Aktion Ihr Transfer-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 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, gehen wir von RPC aus. 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 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 für die Verbindung zu einem HDFS-Cluster mit einfacher Authentifizierung. Lassen Sie dieses Flag weg, wenn Sie sich mit Kerberos authentifizieren oder wenn Sie eine Verbindung ohne Authentifizierung herstellen.

  • --hdfs-data-transfer-protection (optional) ist die clientseitige Einstellung für die Schutzqualität (Quality of Protection, QOP) für Kerberized-Cluster. 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, fügen 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 der zu verwendende Kerberos-Nutzer-Principal. Beispiel: --kerberos-user-principal=user1

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

  • --kerberos-service-principal ist der zu verwendende Kerberos-Dienstprinzipal im Format <primary>/<instance>. Der Bereich wird aus Ihrer Kerberos-Konfigurationsdatei zugeordnet. Alle angegebenen Bereiche werden ignoriert. Wenn dieses Flag nicht angegeben ist, wird standardmäßig hdfs/<namenode_fqdn> verwendet, wobei <namenode_fqdn> der in der Konfigurationsdatei angegebene vollständig 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 jedoch dringend empfohlen. Der Wert ist eine durch Kommas getrennte Liste von Verzeichnissen im Dateisystem, auf die der Agent Zugriff erhalten 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 Agents in Ihrem Pool erhöhen möchten, führen Sie diesen Befehl so oft wie erforderlich aus.

Die erforderlichen Befehlsflags 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, 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, gehen wir von RPC aus. 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 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-Nutzerhauptkonto.
  • --kerberos-keytab-file: Pfad zu einer Keytab-Datei, die den mit --kerberos-user-principal angegebenen Nutzer-Principal enthält.
  • --kerberos-service-principal: Zu verwendendes Kerberos-Diensthauptkonto im Format „service/instance“. Der Bereich wird aus Ihrer Kerberos-Konfigurationsdatei zugeordnet. Alle angegebenen Bereiche werden ignoriert. Wenn dieses Flag nicht angegeben ist, lautet der Standardwert hdfs/<namenode_fqdn>, wobei fqdn der vollständig 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 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, 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. Aus der Eingabe my-namenode wird beispielsweise 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 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, 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. Aus der Eingabe my-namenode wird beispielsweise 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-Funktionen sind für Übertragungen von HDFS nach Cloud Storage verfügbar.

Dateien, die aus HDFS übertragen werden, behalten ihre Metadaten nicht bei.

Übertragung erstellen

Der Name des Übertragungsjobs darf keine vertraulichen Informationen wie personenidentifizierbare Informationen (PII) oder Sicherheitsdaten enthalten. Ressourcennamen können an die Namen anderer Google Cloud-Ressourcen weitergegeben und in Google-internen Systemen außerhalb Ihres Projekts verfügbar gemacht werden.

Der Storage Transfer Service bietet mehrere Schnittstellen zum Erstellen einer Übertragung.

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 ein, von dem aus die Übertragung erfolgen soll, relativ zum Stammverzeichnis.

  2. Geben Sie optional Filter an, 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. Zum Erstellen eines neuen Buckets 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 Ihre Cloud Storage-Speicherklasse aus und geben Sie an, 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 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 Sie die Übertragungsprotokollierung und/oder Pub/Sub-Benachrichtigungen aktivieren möchten.

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 Nameknoten und der Port des Clusters werden auf Agent-Ebene konfiguriert. Im Befehl zum Erstellen des Jobs müssen daher 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: Bestimmen Sie, ob Zieldateien überschrieben werden sollen (--overwrite-when=different oderalways) und ob bestimmte Dateien während oder nach der Übertragung gelöscht werden sollen (--delete-from=destination-if-unique odersource-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

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 transferJobs.create-Referenz.

Cluster mit mehreren Namenodes

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

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

Sie können die aktive Namenode Ihres Clusters mit dem folgenden Befehl abrufen:

hdfs haadmin -getAllServiceState