Trasferimento da HDFS a Cloud Storage

Storage Transfer Service supporta trasferimenti da origini Hadoop (HDFS) cloud e on-premise.

I trasferimenti da HDFS devono utilizzare Cloud Storage come destinazione.

I casi d'uso includono la migrazione dall'archiviazione on-premise a Cloud Storage, l'archiviazione dei dati per liberare spazio di archiviazione on-premise, la replica dei dati in Google Cloud per la continuità aziendale o il trasferimento dei dati in Google Cloud per l'analisi e l'elaborazione.

Configura le autorizzazioni

Prima di creare un trasferimento, devi configurare le autorizzazioni per le seguenti entità:

L'account utente utilizzato per creare il trasferimento. Questo è l'account a cui è stato eseguito l'accesso alla console Google Cloud o l'account specificato durante l'autenticazione nell'interfaccia a riga di comando "gcloud". L'account utente può essere un normale account utente o un account di servizio gestito dall'utente.
L'account di servizio gestito da Google, chiamato anche agente di servizio, utilizzato da Storage Transfer Service. Questo account è generalmente identificato dal relativo indirizzo email, che utilizza il formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
L'account agente trasferito che fornisce le autorizzazioni Google Cloud per gli agenti di trasferimento. Gli account agente di trasferimento utilizzano le credenziali dell'utente che li installa o quelle di un account di servizio gestito dall'utente per l'autenticazione.

Per le istruzioni, consulta Autorizzazioni di trasferimento basate su agente.

Installa gli agenti in un pool di agenti

I trasferimenti basati su agenti utilizzano agenti software per orchestrare i trasferimenti. Questi agenti devono essere installati su una o più macchine con accesso al file system. Gli agenti devono avere accesso al nodo name, a tutti i nodi dati, al Key Management Server (KMS) di Hadoop e al Kerberos Key Distribution Center (KDC).

Gli agenti trasferiti collaborano in un pool di agenti. L'aumento del numero di agenti può aumentare le prestazioni complessive del job, ma dipende da diversi fattori.

  • L'aggiunta di altri agenti può essere utile, fino a circa la metà del numero di nodi nel tuo cluster HDFS. Ad esempio, con un cluster di 30 nodi, aumentare da 5 a 15 agenti dovrebbe migliorare le prestazioni, ma è improbabile che oltre 15 agenti facciano molta differenza.

  • Per un cluster HDFS di piccole dimensioni, potrebbe essere sufficiente un agente.

  • Quando un trasferimento include un numero elevato di file di piccole dimensioni, gli agenti aggiuntivi tendono ad avere un impatto maggiore sulle prestazioni. Storage Transfer Service raggiunge una velocità effettiva elevata tramite il caricamento in contemporanea delle attività di trasferimento tra più agenti. Maggiore è il numero di file nel carico di lavoro, maggiori sono i vantaggi derivanti dall'aggiunta di più agenti.

Non includere informazioni sensibili come informazioni che consentono l'identificazione personale o dati di sicurezza nel nome del pool di agenti o nel prefisso dell'ID agente. I nomi delle risorse possono essere propagati ai nomi di altre risorse Google Cloud ed essere esposti ai sistemi interni di Google al di fuori del tuo progetto.

Crea un pool di agenti

Crea un pool di agenti. Utilizza il tuo account utente Simbolo dell'account utente per questa azione.

Installa agenti

Installare gli agenti nel pool di agenti. Usa il tuo account agente trasferito per questa azione.

Console Google Cloud

  1. Nella console Google Cloud, vai alla pagina Pool di agenti.

    Vai a Pool di agenti

  2. Seleziona il pool di agenti a cui aggiungere il nuovo agente.

  3. Fai clic su Installa agente.

  4. Segui le istruzioni per installare ed eseguire l'agente.

    Per ulteriori informazioni sulle opzioni della riga di comando dell'agente, consulta Opzioni della riga di comando dell'agente.

Interfaccia a riga di comando gcloud

Per installare uno o più agenti utilizzando gcloud CLI, esegui gcloud transfer agents install:

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 \

Dove:

  • --hdfs-namenode-uri specifica un cluster HDFS che include uno schema, un nodo nome e una porta in formato URI. Ad esempio:

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

    Utilizza HTTP o HTTPS per WebHDFS. Se non viene fornito uno schema, si suppone l'RPC. Se non viene fornita alcuna porta, il valore predefinito è 8020 per RPC, 9870 per HTTP e 9871 per HTTPS. Ad esempio, l'input my-namenode diventa rpc://my-namenode:8020.

    Se il cluster è configurato con più nodi nome, specifica il nodo primario attuale. Per ulteriori informazioni, consulta Cluster con più nodi nome.

  • --hdfs-username è il nome utente per la connessione a un cluster HDFS con autenticazione semplice. Ometti questo flag se esegui l'autenticazione con Kerberos o se ti connetti senza autenticazione.

  • --hdfs-data-transfer-protection (facoltativo) è l'impostazione della qualità della protezione lato client (QOP) per i cluster kerberizzati. Il valore non può essere più restrittivo del valore QOP lato server. I valori validi sono: authentication, integrity e privacy.

Se esegui l'autenticazione con Kerberos, includi anche i seguenti flag:

  • --kerberos-config-file è il percorso di un file di configurazione Kerberos. Ad esempio, --kerberos-config-file=/etc/krb5.conf.

  • --kerberos-user-principal è l'entità utente Kerberos da utilizzare. Ad esempio, --kerberos-user-principal=user1.

  • --kerberos-keytab-file è il percorso di un file Keytab contenente l'entità utente specificata con il flag --kerberos-user-principal. Ad esempio, --kerberos-keytab-file=/home/me/kerberos/user1.keytab.

  • --kerberos-service-principal è l'entità del servizio Kerberos da utilizzare nel formato <primary>/<instance>. L'area di autenticazione viene mappata dal file di configurazione Kerberos; qualsiasi area di autenticazione fornita viene ignorata. Se questo flag non viene specificato, il valore predefinito è hdfs/<namenode_fqdn>, dove <namenode_fqdn> è il nome di dominio completo specificato nel file di configurazione.

    Ad esempio, --kerberos-service-principal=hdfs/my-namenode.a.example.com.

Lo strumento ti guiderà attraverso i passaggi necessari per installare gli agenti. Questo comando installa gli agenti NUM_AGENTS sulla tua macchina, mappati al nome del pool specificato come POOL_NAME e autentica l'agente utilizzando le tue credenziali gcloud. Il nome del pool deve esistere oppure viene restituito un errore.

Il flag --mount-directories è facoltativo, ma è vivamente consigliato. Il suo valore è un elenco separato da virgole di directory del file system a cui concedere l'accesso all'agente. Se questo flag viene omesso, l'intero file system viene montato nel container dell'agente. Per ulteriori dettagli, consulta il riferimento gcloud.

docker run

Prima di utilizzare docker run per installare gli agenti, segui le istruzioni per installare Docker.

Il comando docker run installa un agente. Per aumentare il numero di agenti nel pool, esegui nuovamente questo comando tutte le volte necessario.

I flag dei comandi richiesti dipendono dal tipo di autenticazione utilizzato.

Kerberos

Per eseguire l'autenticazione nel file system utilizzando Kerberos, utilizza il seguente comando:

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

Dove:

  • --network=host deve essere omesso se esegui più di un agente su questa macchina.
  • --hdfs-namenode-uri: uno schema, un nodo nome e una porta, in formato URI, che rappresentano un cluster HDFS. Ad esempio:

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

Utilizza HTTP o HTTPS per WebHDFS. Se non viene fornito uno schema, si suppone l'RPC. Se non viene fornita alcuna porta, il valore predefinito è 8020 per RPC, 9870 per HTTP e 9871 per HTTPS. Ad esempio, l'input my-namenode diventa rpc://my-namenode:8020.

Se il cluster è configurato con più nodi nome, specifica il nodo primario attuale. Per ulteriori informazioni, consulta Cluster con più nodi nome.

  • --kerberos-config-file: percorso di un file di configurazione Kerberos. Il valore predefinito è /etc/krb5.conf.
  • --kerberos-user-principal: l'entità utente Kerberos.
  • --kerberos-keytab-file: percorso di un file Keytab contenente l'entità utente specificata con --kerberos-user-principal.
  • --kerberos-service-principal: entità del servizio Kerberos da utilizzare nel modulo "service/instance". L'area di autenticazione viene mappata dal file di configurazione Kerberos; qualsiasi area di autenticazione fornita viene ignorata. Se questo flag non viene specificato, il valore predefinito è hdfs/<namenode_fqdn>, dove fqdn è il nome di dominio completo.

Autorizzazione semplice

Per eseguire l'autenticazione nel file system utilizzando un'autenticazione semplice:

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}"

Dove:

  • --hdfs-username: nome utente da utilizzare per la connessione a un cluster HDFS utilizzando un'autenticazione semplice.
  • --hdfs-namenode-uri: uno schema, un nodo nome e una porta, in formato URI, che rappresentano un cluster HDFS. Ad esempio:
    • rpc://my-namenode:8020
    • http://my-namenode:9870

Utilizza HTTP o HTTPS per WebHDFS. Se non viene fornito uno schema, si suppone l'RPC. Se non viene fornita alcuna porta, il valore predefinito è 8020 per RPC, 9870 per HTTP e 9871 per HTTPS. Ad esempio, l'input my-namenode diventa rpc://my-namenode:8020.

Se il cluster è configurato con più nodi nome, specifica il nodo primario attuale. Per ulteriori informazioni, consulta Cluster con più nodi nome.

Nessuna autorizzazione

Per connetterti al tuo file system senza alcuna autenticazione:

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 \

Dove:

  • --hdfs-namenode-uri: uno schema, un nodo nome e una porta, in formato URI, che rappresentano un cluster HDFS. Ad esempio:
    • rpc://my-namenode:8020
    • http://my-namenode:9870

Utilizza HTTP o HTTPS per WebHDFS. Se non viene fornito uno schema, si suppone l'RPC. Se non viene fornita alcuna porta, il valore predefinito è 8020 per RPC, 9870 per HTTP e 9871 per HTTPS. Ad esempio, l'input my-namenode diventa rpc://my-namenode:8020.

Se il cluster è configurato con più nodi nome, specifica il nodo primario attuale. Per ulteriori informazioni, consulta Cluster con più nodi nome.

Opzioni di trasferimento

Le seguenti funzionalità di Storage Transfer Service sono disponibili per i trasferimenti da HDFS a Cloud Storage.

I file trasferiti da HDFS non conservano i relativi metadati.

Crea un trasferimento

Non includere informazioni sensibili come informazioni che consentono l'identificazione personale o dati di sicurezza nel nome del job di trasferimento. I nomi delle risorse possono essere propagati ai nomi di altre risorse Google Cloud ed essere esposti ai sistemi interni di Google al di fuori del tuo progetto.

Storage Transfer Service fornisce diverse interfacce attraverso le quali creare un trasferimento.

Console Google Cloud

  1. Vai alla pagina Storage Transfer Service nella console Google Cloud.

    Vai a Storage Transfer Service

  2. Fai clic su Crea job di trasferimento. Viene visualizzata la pagina Crea un job di trasferimento.

  3. Seleziona Hadoop Distributed File System come Tipo di origine. La destinazione deve essere Google Cloud Storage.

    Fai clic su Passaggio successivo.

Configura l'origine

  1. Specifica le informazioni richieste per questo trasferimento:

    1. Seleziona il pool di agenti che hai configurato per questo trasferimento.

    2. Inserisci il Percorso da cui effettuare il trasferimento in relazione alla directory radice.

  2. (Facoltativo) Specifica eventuali filtri da applicare ai dati di origine.

  3. Fai clic su Passaggio successivo.

Configura il sink

  1. Nel campo Bucket o cartella, inserisci il bucket di destinazione e, facoltativamente, il nome della cartella oppure fai clic su Sfoglia per selezionare un bucket da un elenco di bucket esistenti nel progetto attuale. Per creare un nuovo bucket, fai clic su Icona bucket Crea nuovo bucket.

  2. Fai clic su Passaggio successivo.

Programma il trasferimento

Puoi pianificare il trasferimento in modo che venga eseguito una sola volta o configurare un trasferimento ricorrente.

Fai clic su Passaggio successivo.

Scegli le impostazioni di trasferimento

  1. Nel campo Description (Descrizione), inserisci una descrizione del trasferimento. Come best practice, inserisci una descrizione significativa e univoca in modo da poter distinguere i job.

  2. In Opzioni metadati, seleziona la classe di archiviazione di Cloud Storage e se salvare l'ora di creazione di ciascun oggetto. Per i dettagli, consulta Conservazione dei metadati.

  3. In Quando sovrascrivere, seleziona una delle seguenti opzioni:

    • Mai: non sovrascrivere i file di destinazione. Se esiste un file con lo stesso nome, non sarà trasferito.

    • Se diverso: sovrascrive i file di destinazione se il file di origine con lo stesso nome ha valori Etag o checksum diversi.

    • Sempre: sovrascrive sempre i file di destinazione quando il file di origine ha lo stesso nome, anche se sono identici.

  4. In Quando eliminare, seleziona una delle seguenti opzioni:

    • Mai: non eliminare mai i file dall'origine o dalla destinazione.

    • Elimina i file dalla destinazione se non sono anche nell'origine: se i file nel bucket Cloud Storage di destinazione non sono anche nell'origine, eliminali dal bucket Cloud Storage.

      Questa opzione garantisce che il bucket Cloud Storage di destinazione corrisponda esattamente all'origine.

  5. Scegli se abilitare il trasferimento di logging e/o le notifiche Pub/Sub.

Fai clic su Crea per creare il job di trasferimento.

Interfaccia a riga di comando gcloud

Per creare un nuovo job di trasferimento, utilizza il comando gcloud transfer jobs create. La creazione di un nuovo job avvia il trasferimento specificato, a meno che non venga specificata una pianificazione o un --do-not-run.

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

Dove:

  • PATH è un percorso assoluto dalla directory principale del cluster HDFS. Il nome e la porta del cluster sono configurati a livello di agente, quindi il comando di creazione del job deve specificare solo il percorso (facoltativo) e il pool di agenti.

  • --source-agent-pool specifica il pool di agenti di origine da utilizzare per questo trasferimento.

Ecco alcune opzioni aggiuntive:

  • --do-not-run impedisce a Storage Transfer Service di eseguire il job all'invio del comando. Per eseguire il job, aggiornalo per aggiungere una pianificazione oppure utilizza jobs run per avviarlo manualmente.

  • --manifest-file specifica il percorso di un file CSV in Cloud Storage contenente un elenco di file da trasferire dalla tua origine. Per la formattazione dei file manifest, consulta Trasferire file o oggetti specifici utilizzando un manifest.

  • Informazioni sul job: puoi specificare --name e --description.

  • Pianificazione: specifica --schedule-starts, --schedule-repeats-every e --schedule-repeats-until o --do-not-run.

  • Condizioni degli oggetti: utilizza le condizioni per determinare quali oggetti vengono trasferiti. Questi includono --include-prefixes e --exclude-prefixes e le condizioni basate sul tempo in --include-modified-[before | after]-[absolute | relative]. Se hai specificato una cartella con la tua origine, i filtri per il prefisso sono relativi alla cartella. Per ulteriori informazioni, consulta Filtrare gli oggetti di origine in base al prefisso.

  • Opzioni di trasferimento: specifica se sovrascrivere i file di destinazione (--overwrite-when=different o always) e se eliminare determinati file durante o dopo il trasferimento (--delete-from=destination-if-unique o source-after-transfer); facoltativamente, imposta una classe di archiviazione sugli oggetti trasferiti (--custom-storage-class).

  • Notifiche: configura le notifiche Pub/Sub per i trasferimenti con --notification-pubsub-topic, --notification-event-types e --notification-payload-format.

Per visualizzare tutte le opzioni, esegui gcloud transfer jobs create --help o fai riferimento alla documentazione di riferimento di gcloud.

API REST

Per creare un trasferimento da un'origine HDFS utilizzando l'API REST, crea un oggetto JSON simile all'esempio seguente.

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

Per informazioni dettagliate sui campi aggiuntivi supportati, consulta il riferimento transferJobs.create.

Cluster con più nodi nome

Gli agenti Storage Transfer Service possono essere configurati con un solo nodo nome. Se il tuo cluster HDFS è configurato con più namenodi ("alta disponibilità") e si verifica un evento di failover che genera un nuovo namenode principale, devi reinstallare gli agenti con il namenode corretto.

Per eliminare gli agenti precedenti, consulta Eliminare un agente.

Il nodo del nome attivo del cluster può essere recuperato eseguendo:

hdfs haadmin -getAllServiceState