Esegui la migrazione delle tabelle da un data lake HDFS
Questo documento mostra come eseguire la migrazione delle tabelle del data lake Apache Hadoop Distributed File System (HDFS) a Trusted Cloud.
Puoi utilizzare il connettore di migrazione del data lake HDFS in BigQuery Data Transfer Service per eseguire la migrazione delle tabelle Hive e Iceberg da varie distribuzioni Hadoop, sia on-premise che in ambienti cloud, in Trusted Cloud.
Con il connettore del data lake HDFS, puoi registrare le tabelle del data lake HDFS sia con Dataproc Metastore che con BigLake Metastore utilizzando Cloud Storage come spazio di archiviazione sottostante per i tuoi file.
Il seguente diagramma fornisce una panoramica della procedura di migrazione delle tabelle dal cluster Hadoop.
Limitazioni
I trasferimenti del data lake HDFS sono soggetti alle seguenti limitazioni:
- Per eseguire la migrazione delle tabelle Iceberg, devi registrarle con il metastore BigLake per consentire l'accesso in scrittura per i motori open source (come Spark o Flink) e l'accesso in lettura per BigQuery.
- Per eseguire la migrazione delle tabelle Hive, devi registrarle con Dataproc Metastore per consentire l'accesso in scrittura per i motori open source e l'accesso in lettura per BigQuery.
- Devi utilizzare lo strumento a riga di comando bq per eseguire la migrazione di una tabella del data lake HDFS a BigQuery.
Prima di iniziare
Prima di pianificare un trasferimento del data lake HDFS, devi eseguire le seguenti operazioni:
Crea un bucket Cloud Storage per i file migrati
Crea un bucket Cloud Storage che sarà la destinazione dei file del data lake di cui è stata eseguita la migrazione. Questo bucket è
indicato in questo documento come MIGRATION_BUCKET
.
File richiesti
Prima di poter pianificare un trasferimento del data lake HDFS, devi disporre dei seguenti file di migrazione in un bucket Cloud Storage:
- Il file di metadati estratto (
hive-dumper-output.zip
) - Il file YAML di configurazione della traduzione (
*.config.yaml
) - I file YAML di mapping delle tabelle
Le sezioni seguenti descrivono come creare questi file.
hive-dumper-output.zip
Esegui lo strumento dwh-migration-dumper
per estrarre i metadati
per Apache Hive. Lo strumento genera un file denominato hive-dumper-output.zip
in un bucket Cloud Storage, indicato in questo documento come DUMPER_BUCKET
.
File YAML di configurazione della traduzione
Crea un file YAML di configurazione della traduzione con un nome contenente il suffisso
.config.yaml
, ad esempio translation.config.yaml
, e caricalo nello stesso bucket che contiene hive-dumper-output.zip
. Configura il file YAML di configurazione della
traduzione per mappare i percorsi HDFS alle cartelle gestite di Cloud Storage, in modo simile all'esempio seguente:
type: object_rewriter relation: - match: relationRegex: ".*" external: location_expression: "'gs://MIGRATION_BUCKET/' + table.schema + '/' + table.name"
Sostituisci MIGRATION_BUCKET
con il nome del bucket Cloud Storage che è la destinazione dei file di cui è stata eseguita la migrazione.
Il campo location_expression
è un'espressione Common Expression Language (CEL).
Per ulteriori informazioni su questo file YAML di configurazione, consulta Linee guida per creare un file YAML di configurazione.
Genera file YAML di mappatura delle tabelle
Per generare un file YAML di mappatura delle tabelle, esegui questo comando:
curl -d '{ "tasks": { "string": { "type": "HiveQL2BigQuery_Translation", "translation_details": { "target_base_uri": "TRANSLATION_OUTPUT_BUCKET", "source_target_mapping": { "source_spec": { "base_uri": "DUMPER_BUCKET" } }, "target_types": ["metadata"] } } } }' \ -H "Content-Type:application/json" \ -H "Authorization: Bearer TOKEN" -X POST https://bigquerymigration.googleapis.com/v2alpha/projects/PROJECT_ID/locations/LOCATION/workflows
Sostituisci quanto segue:
TRANSLATION_OUTPUT_BUCKET
: l'URI di base di un bucket Cloud Storage che contiene il file YAML di mapping delle tabelle. Ad esempio,gs://output_bucket/tables/
.DUMPER_BUCKET
: l'URI di base per il bucket Cloud Storage che contiene il file YAML dihive-dumper-output.zip
e di configurazione.TOKEN
: il token OAuth. Puoi generarlo nella riga di comando con il comandogcloud auth print-access-token
.PROJECT_ID
: il progetto in cui elaborare la traduzione.LOCATION
: la località in cui viene elaborato il job. Ad esempio,eu
ous
.
Quando viene eseguita, l'API Translation Service restituisce un WORKFLOW_ID
e avvia un
job asincrono in background. Puoi monitorare lo stato di questo job utilizzando il
seguente comando:
curl \ -H "Content-Type:application/json" \ -H "Authorization:Bearer TOKEN" -X GET https://bigquerymigration.googleapis.com/v2alpha/projects/PROJECT_ID/locations/LOCATION/workflows/WORKFLOW_ID
Al termine, vengono creati i file YAML di mappatura delle tabelle. I file YAML di mappatura delle tabelle potrebbero essere costituiti da più file di mappatura, uno per ogni tabella, archiviati nella cartella Cloud Storage.
Abilita API
Abilita le seguenti API nel tuo progetto Trusted Cloud :
- API Data Transfer
- API Storage Transfer
Un agente di servizio viene creato quando abiliti l'API Data Transfer.
Configura autorizzazioni
- Crea un account di servizio e concedigli il ruolo Amministratore BigQuery (
roles/bigquery.admin
). Questo account di servizio viene utilizzato per creare la configurazione del trasferimento. - Quando viene abilitata l'API Data Transfer, viene creato un agente di servizio (P4SA). Concedi
i seguenti ruoli:
roles/metastore.metadataOwner
roles/storagetransfer.admin
roles/serviceusage.serviceUsageConsumer
roles/storage.objectViewer
- Se esegui la migrazione dei metadati per le tabelle BigLake
Iceberg, concedi i ruoli
roles/storage.objectAdmin
eroles/bigquery.admin
anzichéroles/storage.objectViewer
.
- Se esegui la migrazione dei metadati per le tabelle BigLake
Iceberg, concedi i ruoli
Concedi all'agente di servizio il ruolo
roles/iam.serviceAccountTokenCreator
con il seguente comando:gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.s3ns-system.iam.gserviceaccount.com --role roles/iam.serviceAccountTokenCreator
Configura Storage Transfer Agent
Per configurare l'agente di trasferimento dello spazio di archiviazione richiesto per un trasferimento del data lake HDFS:
- Configura le autorizzazioni per eseguire l'agente di trasferimento dello spazio di archiviazione sul tuo cluster Hadoop.
- Installa Docker sulle macchine agenti on-premise.
- Crea un pool di agenti Storage Transfer Service nel tuo progetto Trusted Cloud by S3NS .
- Installa gli agenti sulle macchine agenti on-premise.
Pianifica un trasferimento del data lake HDFS
Per pianificare un trasferimento del data lake HDFS, inserisci il comando bq mk
e fornisci il flag di creazione del trasferimento --transfer_config
:
bq mk --transfer_config --data_source=hadoop --display_name='TRANSFER_NAME' --service_account_name='SERVICE_ACCOUNT' --project_id='PROJECT_ID' --location='REGION' --params='{"table_name_patterns":"LIST_OF_TABLES", "agent_pool_name":"AGENT_POOL_NAME", "destination_dataproc_metastore":"DATAPROC_METASTORE", "translation_output_gcs_path":"gs://TRANSLATION_OUTPUT_BUCKET/metadata/config/default_database/", "table_metadata_path":"gs://DUMPER_BUCKET/hive-dumper-output.zip"}'
Sostituisci quanto segue:
TRANSFER_NAME
: il nome visualizzato per la configurazione del trasferimento. Il nome del trasferimento può essere qualsiasi valore che ti consenta di identificare il trasferimento se devi modificarlo in un secondo momento.SERVICE_ACCOUNT
: il nome del account di servizio utilizzato per autenticare il trasferimento. Il account di servizio deve essere di proprietà dello stessoproject_id
utilizzato per creare il trasferimento e deve disporre di tutte le autorizzazioni richieste.PROJECT_ID
: il tuo ID progetto Trusted Cloud by S3NS . Se--project_id
non viene fornito per specificare un progetto particolare, viene utilizzato il progetto predefinito.REGION
: la posizione di questa configurazione di trasferimento.LIST_OF_TABLES
: un elenco di entità da trasferire. Utilizza una specifica di denominazione gerarchica:database.table
. Questo campo supporta l'espressione regolare RE2 per specificare le tabelle. Ad esempio:db1..*
: specifica tutte le tabelle nel databasedb1.table1;db2.table2
: un elenco di tabelle
AGENT_POOL_NAME
: il nome del pool di agenti utilizzato per la creazione degli agenti.DATAPROC_METASTORE
: il Dataproc Metastore di destinazione per la destinazione OSS gestita. Per utilizzare BigLake Metastore, puoi omettere questo campo dalla configurazione di trasferimento. Per ulteriori informazioni sull'utilizzo di BigLake Metastore per eseguire la migrazione dei metadati, vedi Migrazione dei metadati.
Esegui questo comando per creare la configurazione del trasferimento e avviare il trasferimento del data lake HDFS. Per impostazione predefinita, i trasferimenti vengono eseguiti ogni 24 ore, ma possono essere configurati con le opzioni di pianificazione del trasferimento.
Al termine del trasferimento, le tabelle nel cluster Hadoop verranno
migrate a MIGRATION_BUCKET
.
Opzioni di importazione dei dati
Le sezioni seguenti forniscono ulteriori informazioni su come configurare i trasferimenti del data lake HDFS.
Migrazione dei metadati
I metadati possono essere migrati a Dataproc Metastore o BigLake Metastore con i dati sottostanti archiviati in Cloud Storage.
Per trasferire i metadati a Dataproc Metastore, specifica l'URL
del metastore nel campo destination_dataproc_metastore
.
Per trasferire i metadati a BigLake Metastore, non è necessario specificare un campo destination_dataproc_metastore
nella configurazione del trasferimento. Il sistema determina automaticamente il set di dati BigQuery di destinazione dal campo targetName
all'interno dei file di mapping YAML generati.
Il campo targetName
è formattato come un identificatore in due parti, ad esempio bigquery_dataset_name.bigquery_table_name
. Per impostazione predefinita, la denominazione sarà allineata al sistema di origine. Devi assicurarti che esista il set di dati BigQuery con il nome dello schema di origine oppure crearlo prima di eseguire il trasferimento.
Per utilizzare un altro set di dati BigQuery, devi fornire un file YAML di configurazione aggiuntivo (con suffisso config.yaml
) in DUMPER_BUCKET
contenente un set di regole di riscrittura degli oggetti e poi generare i mapping di traduzione. L'esempio seguente è un insieme di regole che mappa il database di origine denominato my_hive_db
a un set di dati BigQuery denominato my_bq_dataset
:
relation:
- match:
schema: my_hive_db
outputName:
database: null
schema: my_bq_dataset
Il parametro schema
deve corrispondere al nome del set di dati BigQuery e il parametro relation
deve corrispondere al nome della tabella. Per saperne di più, vedi Mapping dei nomi di output.
Anche il parametro database
deve essere impostato su null
.
Trasferimenti incrementali
Quando una configurazione del trasferimento viene impostata con una pianificazione ricorrente, ogni trasferimento successivo aggiorna la tabella su Trusted Cloud by S3NS con gli ultimi aggiornamenti apportati alla tabella di origine. Ad esempio, tutte le operazioni di inserimento, eliminazione o aggiornamento con modifiche allo schema vengono riflesse in Trusted Cloud by S3NS a ogni trasferimento.
Opzioni di pianificazione del trasferimento
Per impostazione predefinita, i trasferimenti sono pianificati per
essere eseguiti ogni 24 ore. Per configurare la frequenza di esecuzione dei trasferimenti,
aggiungi il flag --schedule
alla configurazione del trasferimento e specifica una pianificazione
del trasferimento utilizzando la sintassi schedule
.
I trasferimenti del data lake HDFS devono avere un intervallo minimo di 24 ore
tra le esecuzioni del trasferimento.
Per i trasferimenti una tantum, puoi aggiungere il
flag end_time
alla configurazione del trasferimento per eseguire il
trasferimento una sola volta.
Monitorare i trasferimenti del data lake HDFS
Dopo aver pianificato un trasferimento del data lake HDFS, puoi monitorare il job di trasferimento con i comandi dello strumento a riga di comando bq. Per informazioni sul monitoraggio dei job di trasferimento, vedi Visualizzare i trasferimenti.
Monitorare lo stato della migrazione delle tabelle
Puoi anche eseguire lo strumento
dwh-dts-status
per monitorare lo stato di tutte le tabelle trasferite all'interno
di una configurazione di trasferimento o di un database specifico. Puoi anche utilizzare lo strumento dwh-dts-status
per elencare tutte le configurazioni di trasferimento in un progetto.
Prima di iniziare
Prima di poter utilizzare lo strumento dwh-dts-status
, segui questi passaggi:
Scarica lo strumento
dwh-dts-status
scaricando il pacchettodwh-migration-tool
dal repository GitHubdwh-migration-tools
.Autentica il tuo account su Trusted Cloud by S3NS con questo comando:
gcloud auth application-default login
Per saperne di più, consulta Come funzionano le credenziali predefinite dell'applicazione.
Verifica che l'utente disponga del ruolo
bigquery.admin
elogging.viewer
. Per maggiori informazioni sui ruoli IAM, consulta Riferimento al controllo dell'accesso.
Elenco di tutte le configurazioni di trasferimento in un progetto
Per elencare tutte le configurazioni di trasferimento in un progetto, utilizza il seguente comando:
./dwh-dts-status --list-transfer-configs --project-id=[PROJECT_ID] --location=[LOCATION]
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto Trusted Cloud by S3NS che esegue i trasferimenti.LOCATION
: la località in cui è stata creata la configurazione del trasferimento.
Questo comando restituisce una tabella con un elenco di nomi e ID di configurazione del trasferimento.
Visualizza gli stati di tutte le tabelle in una configurazione
Per visualizzare lo stato di tutte le tabelle incluse in una configurazione di trasferimento, utilizza il seguente comando:
./dwh-dts-status --list-status-for-config --project-id=[PROJECT_ID] --config-id=[CONFIG_ID] --location=[LOCATION]
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto Trusted Cloud by S3NS che esegue i trasferimenti.LOCATION
: la località in cui è stata creata la configurazione del trasferimento.CONFIG_ID
: l'ID della configurazione di trasferimento specificata.
Questo comando restituisce una tabella con un elenco di tabelle e il relativo stato di trasferimento
nella configurazione di trasferimento specificata. Lo stato del trasferimento può essere uno dei
seguenti valori: PENDING
, RUNNING
, SUCCEEDED
, FAILED
, CANCELLED
.
Visualizzare gli stati di tutte le tabelle di un database
Per visualizzare lo stato di tutte le tabelle trasferite da un database specifico, utilizza il seguente comando:
./dwh-dts-status --list-status-for-database --project-id=[PROJECT_ID] --database=[DATABASE]
Sostituisci quanto segue:
PROJECT_ID
: l'ID progetto Trusted Cloud by S3NS che esegue i trasferimenti.DATABASE
:il nome del database specificato.
Questo comando restituisce una tabella con un elenco di tabelle e il relativo stato di trasferimento
nel database specificato. Lo stato del trasferimento può essere uno dei
seguenti valori: PENDING
, RUNNING
, SUCCEEDED
, FAILED
, CANCELLED
.