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.

Panoramica della migrazione delle tabelle dal data lake Hive a BigQuery.

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.

Genera il file di metadati per Apache Hive

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.

Abilita API

Abilita le seguenti API nel tuo progettoTrusted Cloud :

  • API Data Transfer
  • API Storage Transfer

Un agente di servizio viene creato quando abiliti l'API Data Transfer.

Configura autorizzazioni

  1. 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.
  2. 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 e roles/bigquery.admin anziché roles/storage.objectViewer.
  3. 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.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:

  1. Configura le autorizzazioni per eseguire l'agente di trasferimento di archiviazione sul tuo cluster Hadoop.
  2. Installa Docker sulle macchine agenti on-premise.
  3. Crea un pool di agenti Storage Transfer Service nel tuo progetto Trusted Cloud by S3NS .
  4. 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",
    "table_metadata_path":"gs://DUMPER_BUCKET/hive-dumper-output.zip",
    "target_gcs_file_path":"gs://MIGRATION_BUCKET",
    "destination_dataproc_metastore":"DATAPROC_METASTORE",
    "destination_bigquery_dataset":"BIGLAKE_METASTORE",
    "translation_output_gcs_path":"gs://TRANSLATION_OUTPUT_BUCKET/metadata/config/default_database/"
    }'

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 stesso project_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 database
    • db1.table1;db2.table2: un elenco di tabelle
  • AGENT_POOL_NAME: il nome del pool di agenti utilizzato per la creazione degli agenti.
  • DUMPER_BUCKET: il bucket Cloud Storage contenente il file hive-dumper-output.zip.
  • MIGRATION_BUCKET: percorso GCS di destinazione in cui verranno caricati tutti i file sottostanti.

  • I metadati possono essere migrati a Dataproc Metastore o BigLake Metastore con i dati sottostanti archiviati in Cloud Storage. Puoi specificare la destinazione utilizzando uno dei seguenti parametri:

    • Per trasferire i metadati a Dataproc Metastore, utilizza il parametro destination_dataproc_metastore e specifica l'URL del metastore in DATAPROC_METASTORE.
    • Per trasferire i metadati a BigLake Metastore, utilizza il parametro destination_bigquery_dataset e specifica il set di dati BigQuery in BIGLAKE_METASTORE.
  • TRANSLATION_OUTPUT_BUCKET: (facoltativo) specifica un bucket Cloud Storage per l'output della traduzione. Per ulteriori informazioni, consulta la sezione Utilizzare l'output di traduzione.

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.

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.

Configura l'output della traduzione

Puoi configurare un percorso Cloud Storage e un database unici per ogni tabella migrata. Per farlo, segui questi passaggi per generare un file YAML di mappatura delle tabelle che puoi utilizzare nella configurazione del trasferimento.

  1. Crea un file YAML di configurazione (con suffisso config.yaml) nella directory DUMPER_BUCKET che contenga quanto segue:

        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 delle tabelle di cui è stata eseguita la migrazione. Il campo location_expression è un'espressione Common Expression Language (CEL).
  2. Crea un altro file YAML di configurazione (con suffisso config.yaml) nella directory DUMPER_BUCKET che contenga quanto segue:

        type: experimental_object_rewriter
        relation:
          - match:
              schema: SOURCE_DATABASE
            outputName:
              database: null
              schema: TARGET_DATABASE
    • Sostituisci SOURCE_DATABASE e TARGET_DATABASE con il nome del database di origine e del database Dataproc Metastore o del set di dati BigQuery a seconda del metastore scelto. Assicurati che il set di dati BigQuery esista se stai configurando il database per BigLake Metastore.

    Per saperne di più su questi file YAML di configurazione, consulta Linee guida per la creazione di un file YAML di configurazione.

  3. Genera il file YAML di mappatura delle tabelle utilizzando 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: (Facoltativo) Specifica un bucket Cloud Storage per l'output della traduzione. Per ulteriori informazioni, consulta la sezione Utilizzare l'output di traduzione.
    • DUMPER_BUCKET: l'URI di base per il bucket Cloud Storage che contiene il file YAML di hive-dumper-output.zip e di configurazione.
    • TOKEN: il token OAuth. Puoi generarlo nella riga di comando con il comando gcloud 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 o us.
  4. Monitora lo stato di questo job. Al termine, viene generato un file di mappatura per ogni tabella del database all'interno di un percorso predefinito in TRANSLATION_OUTPUT_BUCKET.

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:

  1. Scarica lo strumento dwh-dts-status scaricando il pacchetto dwh-migration-tool dal repository GitHub dwh-migration-tools.

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

  3. Verifica che l'utente disponga del ruolo bigquery.admin e logging.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.