Ü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 aus 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 wurde. 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 bezeichnet Agent, der vom Storage Transfer Service verwendet wird. Dieses Konto ist im Allgemeinen durch seine E-Mail-Adresse, die das Format project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com
Das Konto des Migrations-Agents, das Google Cloud-Berechtigungen für Migrations-Agents bereitstellt. Für Übertragungs-Agent-Konten wird die des Nutzers, der sie installiert, oder die Anmeldedaten eines nutzerverwaltetes Dienstkonto zur Authentifizierung.

Weitere Informationen finden Sie unter Agent-basierte Übertragungsberechtigungen .

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 Rechnern mit Zugriff auf in Ihrem Dateisystem. 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 Anzahl der Kundenservicemitarbeiter zu erhöhen, kann die Gesamtleistung des Jobs steigern. 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 wird beispielsweise von 5 auf 15 Agents erhöht die Leistung zu verbessern, aber mehr als 15 macht wahrscheinlich keinen großen Unterschied aus.

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

  • 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.

Geben Sie keine vertraulichen Daten wie personenidentifizierbare Informationen an (PII) oder Sicherheitsdaten in Ihrem Agent-Poolnamen oder im Agent-ID-Präfix enthalten. Ressourcennamen können an die Namen anderer Google Cloud-Ressourcen weitergegeben und Google-internen Systemen außerhalb Ihres Projekts zu implementieren.

Agent-Pool erstellen

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

Agents installieren

Installieren Sie Agents im Agent-Pool. Verwende für diese Aktion dein 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 einschließlich eines Schemas an. 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, wird von RPC ausgegangen. Wenn Es wird kein Port angegeben. Der Standardwert ist 8020 für RPC, 9870 für HTTP und 9871 für HTTPS. Beispielsweise wird die Eingabe-my-namenode zu rpc://my-namenode:8020.

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

  • --hdfs-username ist der Nutzername zum Herstellen einer Verbindung zu einem HDFS-Cluster mit einfache 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 Qualität von Schutzeinstellung (QOP) für mit Kerberos gesicherte 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 festgelegt ist, ist der Standardwert hdfs/<namenode_fqdn>, wobei <namenode_fqdn> den Wert Der in der Konfigurationsdatei angegebene voll qualifizierte Domainname.

    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. Das value ist eine durch Kommas getrennte Liste von Verzeichnissen im Dateisystem, in die um dem Agent Zugriff zu gewähren. Wenn Sie dieses Flag weglassen, wird das gesamte Dateisystem im Agent-Container bereitgestellt. Weitere Informationen finden Sie unter die Referenz zu gcloud .

docker run

Bevor Sie Agents mit docker run installieren, folgen Sie der Anleitung zum Installieren Sie Docker.

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

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

Kerberos

Um sich mit Kerberos bei Ihrem Dateisystem zu authentifizieren, verwenden Sie die folgenden Befehl:

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 ausführen auf diesem Computer.
  • --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 von RPC ausgegangen. Wenn Es wird kein Port angegeben. Der Standardwert ist 8020 für RPC, 9870 für HTTP und 9871 für HTTPS. Beispielsweise wird die Eingabe-my-namenode zu rpc://my-namenode:8020.

Wenn Ihr Cluster mit mehreren Namenodes konfiguriert ist, geben Sie die aktuellen primären Knoten. Weitere Informationen finden Sie unter Cluster mit mehreren Namenodes für weitere Informationen.

  • --kerberos-config-file: Pfad zu einer Kerberos-Konfigurationsdatei. Standardeinstellung ist /etc/krb5.conf.
  • --kerberos-user-principal: Das Kerberos-Nutzerhauptkonto.
  • --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 des 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 beim Herstellen einer Verbindung zu einem HDFS-Cluster verwendet werden soll mit einfacher Authentifizierung.
  • --hdfs-namenode-uri: Ein Schema, ein Namenode und ein Port im URI-Format. für einen HDFS-Cluster. 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. Beispielsweise wird die Eingabe-my-namenode zu rpc://my-namenode:8020.

Wenn Ihr Cluster mit mehreren Namenodes konfiguriert ist, geben Sie die aktuellen primären Knoten. Weitere Informationen finden Sie unter Cluster mit mehreren Namenodes für weitere Informationen.

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. Beispielsweise wird die Eingabe-my-namenode zu 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-Features sind für Übertragungen von HDFS zu Cloud Storage.

Aus dem HDFS übertragene Dateien behalten nicht metadata an.

Übertragung erstellen

Geben Sie keine vertraulichen Daten wie personenidentifizierbare Informationen an (PII) oder Sicherheitsdaten in den Namen des Übertragungsjobs ein. Ressourcennamen können an die Namen anderer Google Cloud-Ressourcen weitergegeben und für interne Google-Systeme außerhalb Ihres Projekts freigegeben werden.

Storage Transfer Service bietet mehrere Schnittstellen zum Erstellen eines übertragen werden.

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

  2. Geben Sie optional eine beliebige Filter, um auf die Quelldaten anwenden.

  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. Klicken Sie zum Erstellen eines neuen Buckets 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 ob die einzelnen Objekte Zeitpunkt der Erstellung. Weitere Informationen finden Sie unter Aufbewahrung von Metadaten .

  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, beziehen sich Präfixfilter auf diesen 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.

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

hdfs haadmin -getAllServiceState