Migra tablas desde un data lake de HDFS

En este documento, se muestra cómo migrar tus tablas de data lake del sistema de archivos distribuido de Apache Hadoop (HDFS) a Google Cloud.

Puedes usar el conector de migración de data lake de HDFS en el Servicio de transferencia de datos de BigQuery para migrar tus tablas de Hive y Iceberg desde varias distribuciones de Hadoop, tanto en entornos locales como en la nube, a Google Cloud.

Con el conector del data lake de HDFS, puedes registrar tus tablas del data lake de HDFS con Dataproc Metastore y BigLake metastore mientras usas Cloud Storage como el almacenamiento subyacente de tus archivos.

En el siguiente diagrama, se proporciona una descripción general del proceso de migración de tablas desde el clúster de Hadoop.

Descripción general de la migración de tablas del data lake de Hive a BigQuery.

Limitaciones

Las transferencias de data lakes de HDFS están sujetas a las siguientes limitaciones:

  • Para migrar tablas de Iceberg, debes registrarlas en el metastore de BigLake para permitir el acceso de escritura a los motores de código abierto (como Spark o Flink) y el acceso de lectura a BigQuery.
  • Para migrar tablas de Hive, debes registrarlas en Dataproc Metastore para permitir el acceso de escritura a los motores de código abierto y el acceso de lectura a BigQuery.
  • Debes usar la herramienta de línea de comandos de bq para migrar una tabla de data lake de HDFS a BigQuery.

Antes de comenzar

Antes de programar una transferencia de data lake de HDFS, debes realizar las siguientes acciones:

Crea un bucket de Cloud Storage para los archivos migrados

Crea un bucket de Cloud Storage que será el destino de los archivos de tu data lake migrado. En este documento, se hace referencia a este bucket como MIGRATION_BUCKET.

Genera un archivo de metadatos para Apache Hive

Ejecuta la herramienta dwh-migration-dumper para extraer metadatos de Apache Hive. La herramienta genera un archivo llamado hive-dumper-output.zip en un bucket de Cloud Storage, al que se hace referencia en este documento como DUMPER_BUCKET.

Habilita las APIs

Habilita las siguientes APIs en tu proyecto deGoogle Cloud :

  • API de Data Transfer
  • API de Storage Transfer

Cuando habilitas la API de Data Transfer, se crea un agente de servicio.

Configura permisos

  1. Crea una cuenta de servicio y otórgale el rol de administrador de BigQuery (roles/bigquery.admin). Esta cuenta de servicio se usa para crear la configuración de transferencia.
  2. Cuando se habilita la API de Data Transfer, se crea un agente de servicio (P4SA). Otorga los siguientes roles:
    • roles/metastore.metadataOwner
    • roles/storagetransfer.admin
    • roles/serviceusage.serviceUsageConsumer
    • roles/storage.objectViewer
      • Si migras metadatos para tablas de Iceberg de BigLake, otórgale los roles roles/storage.objectAdmin y roles/bigquery.admin en lugar de roles/storage.objectViewer.
  3. Otorga al agente de servicio el rol roles/iam.serviceAccountTokenCreator con el siguiente comando:

    gcloud iam service-accounts add-iam-policy-binding SERVICE_ACCOUNT --member serviceAccount:service-PROJECT_NUMBER@gcp-sa-bigquerydatatransfer.iam.gserviceaccount.com --role roles/iam.serviceAccountTokenCreator

Configura tu agente de Transferencia de almacenamiento

Para configurar el agente de transferencia de almacenamiento necesario para una transferencia de data lake de HDFS, haz lo siguiente:

  1. Configura los permisos para ejecutar el agente de transferencia de almacenamiento en tu clúster de Hadoop.
  2. Instala Docker en las máquinas de agentes locales.
  3. Crea un grupo de agentes del Servicio de transferencia de almacenamiento en tu Google Cloud proyecto.
  4. Instala agentes en tus máquinas de agentes locales.

Programa una transferencia de data lake de HDFS

Para programar una transferencia de data lake de HDFS, ingresa el comando bq mk y proporciona la marca de creación de transferencias --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/"
    }'

Reemplaza lo siguiente:

  • TRANSFER_NAME es el nombre visible de la configuración de transferencia. El nombre de la transferencia puede ser cualquier valor que te permita identificarla si es necesario hacerle modificaciones más tarde.
  • SERVICE_ACCOUNT: El nombre de la cuenta de servicio que se usa para autenticar tu transferencia. La cuenta de servicio debe ser propiedad del mismo project_id que se usa para crear la transferencia y debe tener todos los permisos necesarios.
  • PROJECT_ID: El ID de tu proyecto de Google Cloud . Si no se proporciona --project_id para especificar un proyecto en particular, se usa el proyecto predeterminado.
  • REGION: Es la ubicación de esta configuración de transferencia.
  • LIST_OF_TABLES: Es una lista de entidades que se transferirán. Usa una especificación de nombres jerárquica: database.table. Este campo admite expresiones regulares de RE2 para especificar tablas. Por ejemplo:
    • db1..*: Especifica todas las tablas de la base de datos.
    • db1.table1;db2.table2: Una lista de tablas
  • AGENT_POOL_NAME: Es el nombre del grupo de agentes que se usa para crear agentes.
  • DUMPER_BUCKET: Es el bucket de Cloud Storage que contiene el archivo hive-dumper-output.zip.
  • MIGRATION_BUCKET: Es la ruta de acceso de GCS de destino en la que se cargarán todos los archivos subyacentes.

  • Los metadatos se pueden migrar a Dataproc Metastore o a BigLake Metastore, y los datos subyacentes se almacenan en Cloud Storage. Puedes especificar el destino con uno de los siguientes parámetros:

    • Para transferir metadatos a Dataproc Metastore, usa el parámetro destination_dataproc_metastore y especifica la URL de tu almacén de metadatos en DATAPROC_METASTORE.
    • Para transferir metadatos al metastore de BigLake, usa el parámetro destination_bigquery_dataset y especifica el conjunto de datos de BigQuery en BIGLAKE_METASTORE.
  • TRANSLATION_OUTPUT_BUCKET: (Opcional) Especifica un bucket de Cloud Storage para el resultado de la traducción. Para obtener más información, consulta Cómo usar el resultado de la traducción.

Ejecuta este comando para crear la configuración de transferencia y comenzar la transferencia del lake de datos de HDFS. De forma predeterminada, las transferencias se programan para ejecutarse cada 24 horas, pero se pueden configurar con opciones de programación de transferencias.

Cuando se complete la transferencia, tus tablas del clúster de Hadoop se migrarán a MIGRATION_BUCKET.

Opciones de transferencia de datos

En las siguientes secciones, se proporciona más información sobre cómo puedes configurar tus transferencias de data lake de HDFS.

Transferencias incrementales

Cuando se configura una transferencia con un programa recurrente, cada transferencia posterior actualiza la tabla en Google Cloud con las actualizaciones más recientes realizadas en la tabla de origen. Por ejemplo, todas las operaciones de inserción, eliminación o actualización con cambios de esquema se reflejan en Google Cloud con cada transferencia.

Opciones de programación de transferencias

De forma predeterminada, las transferencias se programan para ejecutarse cada 24 horas. Para configurar la frecuencia con la que se ejecutan las transferencias, agrega la marca --schedule a la configuración de la transferencia y especifica un programa de transferencia con la sintaxis schedule. Las transferencias de data lake de HDFS deben tener un mínimo de 24 horas entre ejecuciones de transferencia.

En el caso de las transferencias únicas, puedes agregar la marca end_time a la configuración de transferencia para que esta se ejecute solo una vez.

Configura el resultado de la traducción

Puedes configurar una ruta de acceso y una base de datos de Cloud Storage únicas para cada tabla migrada. Para ello, sigue estos pasos para generar un archivo YAML de asignación de tablas que puedas usar en la configuración de tu transferencia.

  1. Crea un archivo YAML de configuración (con el sufijo config.yaml) en DUMPER_BUCKET que contenga lo siguiente:

        type: object_rewriter
        relation:
        - match:
            relationRegex: ".*"
          external:
            location_expression: "'gs://MIGRATION_BUCKET/' + table.schema + '/' + table.name"
    • Reemplaza MIGRATION_BUCKET por el nombre del bucket de Cloud Storage que es el destino de los archivos de la tabla migrada. El campo location_expression es una expresión del lenguaje de expresiones comunes (CEL).
  2. Crea otro archivo YAML de configuración (con el sufijo config.yaml) en DUMPER_BUCKET que contenga lo siguiente:

        type: experimental_object_rewriter
        relation:
          - match:
              schema: SOURCE_DATABASE
            outputName:
              database: null
              schema: TARGET_DATABASE
    • Reemplaza SOURCE_DATABASE y TARGET_DATABASE por el nombre de la base de datos de origen y la base de datos de Dataproc Metastore o el conjunto de datos de BigQuery, según el metastore elegido. Asegúrate de que exista el conjunto de datos de BigQuery si configuras la base de datos para BigLake Metastore.

    Para obtener más información sobre estos archivos YAML de configuración, consulta Lineamientos para crear un archivo YAML de configuración.

  3. Genera el archivo YAML de asignación de tablas con el siguiente 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

    Reemplaza lo siguiente:

    • TRANSLATION_OUTPUT_BUCKET: (Opcional) Especifica un bucket de Cloud Storage para el resultado de la traducción. Para obtener más información, consulta Cómo usar el resultado de la traducción.
    • DUMPER_BUCKET: Es el URI base del bucket de Cloud Storage que contiene el archivo YAML de hive-dumper-output.zip y de configuración.
    • TOKEN: Es el token de OAuth. Puedes generar este archivo en la línea de comandos con el comando gcloud auth print-access-token.
    • PROJECT_ID: Es el proyecto que procesará la traducción.
    • LOCATION: Es la ubicación en la que se procesa el trabajo. Por ejemplo, eu o us.
  4. Supervisa el estado de este trabajo. Cuando se completa, se genera un archivo de asignación para cada tabla de la base de datos dentro de una ruta predefinida en TRANSLATION_OUTPUT_BUCKET.

Supervisa las transferencias del data lake de HDFS

Después de programar una transferencia de data lake de HDFS, puedes supervisar el trabajo de transferencia con comandos de la herramienta de línea de comandos de bq. Para obtener información sobre cómo supervisar tus trabajos de transferencia, consulta Cómo ver tus transferencias.

Seguimiento del estado de la migración de la tabla

También puedes ejecutar la herramienta dwh-dts-status para supervisar el estado de todas las tablas transferidas dentro de una configuración de transferencia o una base de datos en particular. También puedes usar la herramienta dwh-dts-status para enumerar todas las opciones de configuración de transferencia en un proyecto.

Antes de comenzar

Antes de usar la herramienta de dwh-dts-status, haz lo siguiente:

  1. Para obtener la herramienta dwh-dts-status, descarga el paquete dwh-migration-tool del repositorio de GitHub de dwh-migration-tools.

  2. Autentica tu cuenta en Google Cloud con el siguiente comando:

    gcloud auth application-default login
    

    Para obtener más información, consulta Cómo funcionan las credenciales predeterminadas de la aplicación.

  3. Verifica que el usuario tenga los roles bigquery.admin y logging.viewer. Para obtener más información sobre los roles de IAM, consulta la Referencia de control de acceso.

Enumera todas las configuraciones de transferencia en un proyecto

Para enumerar todas las opciones de configuración de transferencia en un proyecto, usa el siguiente comando:

  ./dwh-dts-status --list-transfer-configs --project-id=[PROJECT_ID] --location=[LOCATION]

Reemplaza lo siguiente:

  • PROJECT_ID : Es el ID del proyecto Google Cloud que ejecuta las transferencias.
  • LOCATION : Es la ubicación en la que se creó la configuración de transferencia.

Este comando genera una tabla con una lista de nombres y IDs de configuración de transferencia.

Consulta los estados de todas las tablas en una configuración

Para ver el estado de todas las tablas incluidas en una configuración de transferencia, usa el siguiente comando:

  ./dwh-dts-status --list-status-for-config --project-id=[PROJECT_ID] --config-id=[CONFIG_ID] --location=[LOCATION]

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto Google Cloud que ejecuta las transferencias.
  • LOCATION: Es la ubicación en la que se creó la configuración de transferencia.
  • CONFIG_ID: Es el ID de la configuración de transferencia especificada.

Este comando genera una tabla con una lista de las tablas y su estado de transferencia en la configuración de transferencia especificada. El estado de la transferencia puede ser uno de los siguientes valores: PENDING, RUNNING, SUCCEEDED, FAILED o CANCELLED.

Consulta los estados de todas las tablas de una base de datos

Para ver el estado de todas las tablas transferidas desde una base de datos específica, usa el siguiente comando:

  ./dwh-dts-status --list-status-for-database --project-id=[PROJECT_ID] --database=[DATABASE]

Reemplaza lo siguiente:

  • PROJECT_ID: Es el ID del proyecto Google Cloud que ejecuta las transferencias.
  • DATABASE:Es el nombre de la base de datos especificada.

Este comando genera una tabla con una lista de las tablas y su estado de transferencia en la base de datos especificada. El estado de la transferencia puede ser uno de los siguientes valores: PENDING, RUNNING, SUCCEEDED, FAILED o CANCELLED.