Trasferimento da HDFS a Cloud Storage

Storage Transfer Service supporta i trasferimenti da Hadoop cloud e on-premise Origini HDFS (Distributed File System).

I trasferimenti da HDFS devono utilizzare Cloud Storage come destinazione.

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

Configura autorizzazioni

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

L'account utente utilizzato per creare il trasferimento. Questo è il collegato alla console Google Cloud o l'account collegato 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 servizio usato da Storage Transfer Service. Questo account è generalmente identificato da il suo indirizzo email, che utilizza il formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
L'account dell'agente trasferito che fornisce Google Cloud autorizzazioni per gli agenti di trasferimento. Gli account agente di trasferimento utilizzano le credenziali dell'utente che le installano oppure le credenziali account di servizio dall'utente, per eseguire l'autenticazione.

Consulta: Autorizzazioni per il trasferimento basato su agente per istruzioni.

Installa agenti in un pool di agenti

I trasferimenti basati su agenti utilizzano agenti software per orchestrare i trasferimenti. Questi agenti deve essere installato su una o più macchine con accesso del file system. Gli agenti devono avere accesso al namenode, a tutti i datanode Hadoop Key Management Server (KMS) e il Kerberos Key Distribution Center (KDC).

Gli agenti di trasferimento collaborano in un pool di agenti. Aumentare il numero di agenti può migliorare le prestazioni complessive del lavoro, ma questo dipende da diversi fattori.

  • L'aggiunta di altri agenti può essere utile: fino a circa la metà del numero di nodi in HDFS in un cluster Kubernetes. Ad esempio, con un cluster di 30 nodi, con un numero di agenti compreso tra 5 e 15 dovrebbe migliorare le prestazioni, ma è improbabile che oltre i 15 facciano la differenza.

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

  • Gli agenti aggiuntivi tendono ad avere un impatto maggiore sulle prestazioni quando un trasferimento che include un numero elevato di file di piccole dimensioni. Storage Transfer Service raggiunge livelli elevati la velocità effettiva mediante il caricamento in contemporanea delle attività di trasferimento tra più agenti. Più dei file nel carico di lavoro, maggiori sono i vantaggi dall'aggiunta di altri agenti.

Non includere informazioni sensibili come informazioni che consentono l'identificazione personale (PII) 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 e potrebbero essere esposti a 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 account utente per questa azione.

Installa agenti

Installare gli agenti nel pool di agenti. Utilizza il tuo account di agente per i trasferimenti per questa azione.

Console Google Cloud

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

    Vai ai 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, vedi Opzioni a 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, namenode e porta in formato URI. Ad esempio:

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

    Utilizza HTTP o HTTPS per WebHDFS. Se non viene fornito nessuno schema, si suppone RPC. Se non viene fornita nessuna 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ù namenodi, specifica la nodo primario attuale. Consulta: Cluster con più namenode per ulteriori informazioni informazioni.

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

  • --hdfs-data-transfer-protection (facoltativo) è la qualità lato client di dell'impostazione di protezione (QOP) per i cluster Kerberizzati. Il valore non può essere superiore restrittive rispetto al 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'utente dell'entità 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 è mappata dal tuo Kerberos di configurazione del deployment; qualsiasi area di autenticazione fornita viene ignorata. Se questo flag non è 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 tutti i passaggi necessari per installare gli agenti. Questo installa NUM_AGENTS agente sulla tua macchina, mappato a il nome del pool specificato come POOL_NAME e autentica il utilizzando le tue credenziali gcloud. Il nome del pool deve esistere oppure .

Il flag --mount-directories è facoltativo, ma vivamente consigliato. È value è un elenco separato da virgole di directory sul file system in cui per concedere l'accesso all'agente. Se ometti questo flag, l'intero file system viene montato nel container dell'agente. Consulta: il Riferimento gcloud per ulteriori dettagli.

docker run

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

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

I flag dei comandi richiesti dipendono dal tipo di autenticazione che utilizzano.

Kerberos

Per eseguire l'autenticazione nel file system utilizzando Kerberos, utilizza la 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: schema, namenode e 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 nessuno schema, si suppone RPC. Se non viene fornita nessuna 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ù namenodi, specifica la nodo primario attuale. Consulta: Cluster con più namenode per ulteriori informazioni informazioni.

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

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 usando l'autenticazione semplice.
  • --hdfs-namenode-uri: schema, namenode e 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 nessuno schema, si suppone 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ù namenodi, specifica la nodo primario attuale. Consulta: Cluster con più namenode per ulteriori informazioni informazioni.

Nessuna autorizzazione

Per connetterti al 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: schema, namenode e 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 nessuno schema, si suppone 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ù namenodi, specifica la nodo primario attuale. Consulta: Cluster con più namenode per ulteriori informazioni informazioni.

Opzioni di trasferimento

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

I file trasferiti da HDFS non conservano metadata.

Crea un trasferimento

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

Storage Transfer Service offre diverse interfacce tramite le quali creare un'istanza 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. La pagina Crea un job di trasferimento visualizzati.

  3. Seleziona Hadoop Distributed File System come Tipo di origine. La 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 questa richiesta trasferimento.

    2. Inserisci il percorso da cui eseguire il trasferimento relativo alla directory principale.

  2. Se vuoi, puoi specificare qualsiasi filtri per si applicano 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) del nome della cartella oppure fai clic su Sfoglia per selezionare un bucket da un elenco di bucket esistenti nel tuo 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 oppure configurare un trasferimento.

Fai clic su Passaggio successivo.

Scegli le impostazioni di trasferimento

  1. Nel campo Descrizione, inserisci una descrizione del trasferimento. Come best practice, inserisci una descrizione significativa univoci in modo da poter distinguere i job.

  2. In Opzioni metadati, seleziona la classe di archiviazione di Cloud Storage, e se salvare o meno ogni oggetto data e ora di creazione. Consulta: Conservazione dei metadati per maggiori dettagli.

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

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

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

    • Sempre: sovrascrive sempre i file di destinazione quando il file di origine. hanno 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 anche i file nel bucket Cloud Storage di destinazione l'origine, quindi elimina i file da Cloud Storage di sincronizzare la directory di una VM con un bucket.

      Questa opzione garantisce che il bucket Cloud Storage di destinazione corrisponde esattamente alla fonte.

  5. Scegli se attivare Logging dei trasferimenti e/o 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 gcloud transfer jobs create . La creazione di un nuovo job avvia il trasferimento specificato, a meno che non venga pianificazione o --do-not-run è specificato.

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

Dove:

  • PATH è un percorso assoluto dalla radice del cluster HDFS. Il cluster namenode e porta sono configurati a livello di agente, quindi la 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 questa richiesta trasferimento.

Altre opzioni includono:

  • --do-not-run impedisce a Storage Transfer Service di eseguire il job al momento dell'invio del comando. Per eseguire il job, aggiornalo in aggiungi una programmazione o utilizza jobs run per avviarla manualmente.

  • --manifest-file specifica il percorso di un file CSV in Cloud Storage contenente un elenco di file da trasferire dall'origine. Per il file manifest formattazione, consulta Trasferisci file o oggetti specifici utilizzando un manifest.

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

  • Pianifica: 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 trasferito. Questi includono --include-prefixes e --exclude-prefixes, e le condizioni basate sul tempo --include-modified-[before | after]-[absolute | relative]. Se una cartella con l'origine, i filtri per prefisso sono relativi . Per ulteriori informazioni, consulta Filtrare gli oggetti di origine per prefisso informazioni.

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

  • Notifiche: configura 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 consulta le documentazione di riferimento 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
    }
  }
}

Consulta la documentazione di riferimento di transferJobs.create per maggiori dettagli su campi aggiuntivi supportati.

Cluster con più namenodi

Gli agenti Storage Transfer Service possono essere configurati con un solo namenode. Se le tue Il cluster HDFS è configurato con più namenode ("alta disponibilità") e un evento di failover genera un nuovo namenode principale, devi reinstalla gli agenti con il namenode corretto.

Per eliminare i vecchi agenti, consulta Eliminare un agente.

Il namenode attivo del cluster può essere recuperato eseguendo:

hdfs haadmin -getAllServiceState