Storage Transfer Service supporta i trasferimenti da origini Hadoop Distributed File System (HDFS) on-premise e cloud.
I trasferimenti da HDFS devono utilizzare Cloud Storage come destinazione.
I casi d'uso includono la migrazione dallo spazio di 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 a Google Cloud per l'analisi e l'elaborazione.
Configura 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 con cui hai eseguito l'accesso alla console Google Cloud o l'account specificato durante l'autenticazione a gcloud CLI. L'account utente può essere un account utente normale o un account di servizio gestito dall'utente. | |
Il service account gestito da Google, noto anche come agente di servizio, utilizzato da Storage Transfer Service. Questo account è generalmente identificato dal suo indirizzo email, che utilizza il formato project-PROJECT_NUMBER@storage-transfer-service.iam.gserviceaccount.com.
|
|
![]() |
L'account agente di trasferimento 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 le credenziali di un account di servizio gestito dall'utente per l'autenticazione. |
Per istruzioni, consulta la sezione Autorizzazioni di trasferimento basate sull'agente.
Installare 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 tuo file system. Gli agenti devono avere accesso al namenode, a tutti i datanode, al server di gestione delle chiavi (KMS) Hadoop e al Key Distribution Center (KDC) Kerberos.
Gli agenti di trasferimento lavorano insieme in un pool di agenti. L'aumento del numero di agenti può migliorare 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 cluster HDFS. Ad esempio, con un cluster di 30 nodi, l'aumento da 5 a 15 agenti dovrebbe migliorare il rendimento, ma è improbabile che un numero superiore a 15 faccia molta differenza.
Per un piccolo cluster HDFS, un agente potrebbe essere sufficiente.
Gli agenti aggiuntivi tendono ad avere un impatto maggiore sul rendimento quando un trasferimento include un numero elevato di file di piccole dimensioni. Storage Transfer Service raggiunge un'elevata velocità effettiva parallelizzando le attività di trasferimento tra più agenti. Più file ci sono nel carico di lavoro, maggiore è il vantaggio di aggiungere altri agenti.
Crea un pool di agenti
Crea un pool di agenti. Utilizza il tuo
account utente
per questa azione.
Installa agenti
Installa gli agenti nel pool di agenti. Utilizza il tuo account agente di trasferimento
per questa azione.
Console Google Cloud
Nella console Google Cloud , vai alla pagina Pool di agenti.
Seleziona il pool di agenti a cui aggiungere il nuovo agente.
Fai clic su Installa agente.
Segui le istruzioni per installare ed eseguire l'agente.
Per ulteriori informazioni sulle opzioni a riga di comando dell'agente, consulta 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-urispecifica un cluster HDFS che include uno schema, un namenode e una porta, nel formato URI. Ad esempio:rpc://my-namenode:8020http://my-namenode:9870
Utilizza HTTP o HTTPS per WebHDFS. Se non viene fornito alcuno schema, si presume che sia RPC. Se non viene fornita alcuna porta, il valore predefinito è
8020per RPC,9870per HTTP e9871per HTTPS. Ad esempio, l'inputmy-namenodediventarpc://my-namenode:8020.Se il cluster è configurato con più namenode, specifica il nodo primario corrente. Per ulteriori informazioni, consulta la sezione Cluster con più nodi dei nomi.
--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 (QOP) lato client per i cluster Kerberizzati. Il valore non può essere più restrittivo del valore QOP lato server. I valori validi sono:authentication,integrityeprivacy.
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 il principal utente specificato con il flag--kerberos-user-principal. Ad esempio,--kerberos-keytab-file=/home/me/kerberos/user1.keytab.--kerberos-service-principalè l'entità servizio Kerberos da utilizzare, nel formato<primary>/<instance>. Il realm viene mappato dal file di configurazione Kerberos; qualsiasi realm fornito viene ignorato. 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 guida 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, altrimenti 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 ometti questo flag, l'intero file system viene montato nel container dell'agente. Per maggiori 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 di nuovo questo comando tutte le volte necessarie.
I flag di comando richiesti dipendono dal tipo di autenticazione che stai utilizzando.
Kerberos
Per eseguire l'autenticazione al 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=hostdeve essere omesso se esegui più di un agente su questa macchina.--hdfs-namenode-uri: uno schema, un namenode e una porta, in formato URI, che rappresentano un cluster HDFS. Ad esempio:rpc://my-namenode:8020http://my-namenode:9870
Utilizza HTTP o HTTPS per WebHDFS. Se non viene fornito alcuno schema, si presume che sia 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ù namenode, specifica il nodo primario corrente. Per ulteriori informazioni, consulta la sezione Cluster con più nodi dei nomi.
--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 il principal utente specificato con--kerberos-user-principal.--kerberos-service-principal: l'entità servizio Kerberos da utilizzare, nel formato "service/instance". Il realm viene mappato dal file di configurazione di Kerberos; qualsiasi realm fornito viene ignorato. Se questo flag non è specificato, il valore predefinito èhdfs/<namenode_fqdn>, dovefqdnè il nome di dominio completo.
Autenticazione semplice
Per eseguire l'autenticazione al file system utilizzando l'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: il nome utente da utilizzare per connettersi a un cluster HDFS utilizzando l'autenticazione semplice.--hdfs-namenode-uri: uno schema, un namenode e una porta, in formato URI, che rappresentano un cluster HDFS. Ad esempio:rpc://my-namenode:8020http://my-namenode:9870
Utilizza HTTP o HTTPS per WebHDFS. Se non viene fornito alcuno schema, si presume che sia 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ù namenode, specifica il nodo primario corrente. Per ulteriori informazioni, consulta la sezione Cluster con più nodi dei nomi.
Nessuna autenticazione
Per connetterti al file system senza 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 namenode e una porta, in formato URI, che rappresentano un cluster HDFS. Ad esempio:rpc://my-namenode:8020http://my-namenode:9870
Utilizza HTTP o HTTPS per WebHDFS. Se non viene fornito alcuno schema, si presume che sia 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ù namenode, specifica il nodo primario corrente. Per ulteriori informazioni, consulta la sezione Cluster con più nodi dei nomi.
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 quelle che consentono l'identificazione personale (PII) o dati di sicurezza nel nome del job di trasferimento. I nomi delle risorse potrebbero essere propagato ai nomi di altre risorse Google Cloud e potrebbe essere esposto ai sistemi interni di Google al di fuori del tuo progetto.
Storage Transfer Service fornisce più interfacce tramite le quali creare un trasferimento.
Console Google Cloud
Vai alla pagina Storage Transfer Service nella Google Cloud console.
Fai clic su Crea job di trasferimento. Viene visualizzata la pagina Crea un job di trasferimento.
Seleziona Hadoop Distributed File System come Tipo di origine. La destinazione deve essere Google Cloud Storage.
Fai clic su Passaggio successivo.
Configura l'origine
Specifica le informazioni richieste per questo trasferimento:
Seleziona il pool di agenti che hai configurato per questo trasferimento.
Inserisci il percorso da cui eseguire il trasferimento, relativo alla directory principale.
Se vuoi, specifica eventuali filtri da applicare ai dati di origine.
Fai clic su Passaggio successivo.
Configura il sink
Nel campo Bucket o cartella, inserisci il nome del bucket di destinazione e (facoltativamente) della cartella oppure fai clic su Sfoglia per selezionare un bucket da un elenco di bucket esistenti nel progetto corrente. Per creare un nuovo bucket, fai clic su
Crea nuovo bucket.Fai clic su Passaggio successivo.
Pianificare il trasferimento
Puoi pianificare il trasferimento in modo che venga eseguito una sola volta o configurare un trasferimento ricorrente.
Fai clic su Passaggio successivo.
Scegliere le impostazioni di trasferimento
Nel campo Descrizione, inserisci una descrizione del trasferimento. Come best practice, inserisci una descrizione significativa e univoca in modo da poter distinguere i job.
Nella sezione Opzioni metadati, seleziona la classe di archiviazione Cloud Storage e se salvare l'ora di creazione di ogni oggetto. Per i dettagli, vedi Conservazione dei metadati.
In Quando sovrascrivere, seleziona una delle seguenti opzioni:
Mai: non sovrascrivere i file di destinazione. Se esiste un file con lo stesso nome, non verrà trasferito.
Se diverso: sovrascrive i file di destinazione se il file di origine con lo stesso nome ha ETag o valori di checksum diversi.
Sempre: sovrascrive sempre i file di destinazione quando il file di origine ha lo stesso nome, anche se sono identici.
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 presenti anche nell'origine: se i file nel bucket Cloud Storage di destinazione non sono presenti anche nell'origine, elimina i file dal bucket Cloud Storage.
Questa opzione garantisce che il bucket Cloud Storage di destinazione corrisponda esattamente all'origine.
Seleziona se attivare la registrazione dei trasferimenti 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 sia 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 radice del cluster HDFS. Il namenode e la porta del cluster vengono 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-poolspecifica il pool di agenti di origine da utilizzare per questo trasferimento.
Altre opzioni sono:
--do-not-runimpedisce a Storage Transfer Service di eseguire il job al momento dell'invio del comando. Per eseguire il job, aggiornalo per aggiungere una pianificazione o utilizzajobs runper avviarlo manualmente.--manifest-filespecifica il percorso di un file CSV in Cloud Storage contenente un elenco di file da trasferire dall'origine. Per la formattazione del file manifest, vedi Trasferire file o oggetti specifici utilizzando un manifest.Informazioni sul job: puoi specificare
--namee--description.Programmazione: specifica
--schedule-starts,--schedule-repeats-everye--schedule-repeats-untilo--do-not-run.Condizioni degli oggetti: utilizza le condizioni per determinare quali oggetti vengono trasferiti. Questi includono
--include-prefixese--exclude-prefixes, nonché le condizioni basate sul tempo in--include-modified-[before | after]-[absolute | relative]. Se hai specificato una cartella con l'origine, i filtri dei prefissi sono relativi a quella cartella. Per saperne di più, consulta Filtrare gli oggetti di origine per prefisso.Opzioni di trasferimento: specifica se sovrascrivere i file di destinazione (
--overwrite-when=differentoalways) e se eliminare determinati file durante o dopo il trasferimento (--delete-from=destination-if-uniqueosource-after-transfer); e, 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-typese--notification-payload-format.
Per visualizzare tutte le opzioni, esegui gcloud transfer jobs create --help o consulta la
documentazione di riferimento di gcloud.
API REST
Per creare un trasferimento da un'origine HDFS utilizzando l'API REST, crea un oggetto JSON simile al seguente esempio.
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 maggiori dettagli sui campi supportati aggiuntivi, consulta il riferimento transferJobs.create.
Cluster con più namenode
Gli agenti di Storage Transfer Service possono essere configurati solo con un singolo namenode. Se il cluster HDFS è configurato con più namenode ("alta disponibilità") e si verifica un evento di failover che comporta un nuovo namenode primario, devi reinstallare 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