Migrar tablas de un lago de datos de HDFS
En este documento se explica cómo migrar las tablas de tu lago de datos de Apache Hadoop Distributed File System (HDFS) a Google Cloud.
Puede usar el conector de migración de data lake de HDFS en BigQuery Data Transfer Service para migrar sus tablas de Hive e Iceberg desde varias distribuciones de Hadoop, tanto en entornos on-premise como en la nube, a Google Cloud.
Con el conector de lago de datos de HDFS, puedes registrar tus tablas de lago de datos de HDFS en Dataproc Metastore y BigLake Metastore mientras usas Cloud Storage como almacenamiento subyacente de tus archivos.
En el siguiente diagrama se muestra un resumen del proceso de migración de tablas desde un clúster de Hadoop.
Limitaciones
Las transferencias de data lakes de HDFS están sujetas a las siguientes limitaciones:
- Para migrar tablas de Iceberg, debes registrarlas en BigLake Metastore 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 bq para migrar una tabla de un lago de datos de HDFS a BigQuery.
Antes de empezar
Antes de programar una transferencia de lago de datos de HDFS, debe hacer lo siguiente:
Crear un segmento de Cloud Storage para los archivos migrados
Crea un segmento de Cloud Storage que será el destino de los archivos de tu lago de datos migrados. En este documento, se hace referencia a este contenedor como MIGRATION_BUCKET
.
Archivos obligatorios
Debe tener los siguientes archivos de migración en un segmento de Cloud Storage para poder programar una transferencia de lago de datos de HDFS:
- El archivo de metadatos extraído (
hive-dumper-output.zip
) - El archivo YAML de configuración de la traducción (
*.config.yaml
) - Los archivos YAML de asignación de tablas
En las siguientes secciones se describe cómo crear estos archivos.
hive-dumper-output.zip
Ejecuta la herramienta dwh-migration-dumper
para extraer metadatos
de Apache Hive. La herramienta genera un archivo llamado hive-dumper-output.zip
en un segmento de Cloud Storage, al que se hace referencia en este documento como DUMPER_BUCKET
.
Archivo YAML de configuración de traducción
Crea un archivo YAML de configuración de traducción con un nombre que contenga el sufijo .config.yaml
(por ejemplo, translation.config.yaml
) y súbelo al mismo segmento que contiene hive-dumper-output.zip
. Configura el archivo YAML de configuración de la traducción para asignar rutas de HDFS a carpetas gestionadas de Cloud Storage, como en el siguiente ejemplo:
type: object_rewriter relation: - match: relationRegex: ".*" external: location_expression: "'gs://MIGRATION_BUCKET/' + table.schema + '/' + table.name"
Sustituye MIGRATION_BUCKET
por el nombre del segmento de Cloud Storage de destino de los archivos migrados.
El campo location_expression
es una expresión del lenguaje de expresión común (CEL).
Para obtener más información sobre este archivo YAML de configuración, consulta las directrices para crear un archivo YAML de configuración.
Generar archivos YAML de asignación de tablas
Para generar un archivo YAML de asignación de tablas, ejecuta 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
Haz los cambios siguientes:
TRANSLATION_OUTPUT_BUCKET
: el URI base de un cubo de Cloud Storage que contiene el archivo YAML de asignación de tablas. Por ejemplo,gs://output_bucket/tables/
.DUMPER_BUCKET
: el URI base del bucket de Cloud Storage que contiene el archivohive-dumper-output.zip
y el archivo YAML de configuración.TOKEN
: el token de OAuth. Puedes generar este archivo en la línea de comandos con el comandogcloud auth print-access-token
.PROJECT_ID
: el proyecto para procesar la traducción.LOCATION
: la ubicación en la que se procesa el trabajo. Por ejemplo,eu
ous
.
Cuando se ejecuta, la API del servicio de traducción devuelve un WORKFLOW_ID
e inicia una tarea en segundo plano asíncrona. Puedes monitorizar el estado de este trabajo con el siguiente 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
Cuando se complete el proceso, se crearán los archivos YAML de asignación de tablas. Los archivos YAML de asignación de tablas pueden constar de varios archivos de asignación, uno por cada tabla, almacenados en la carpeta de Cloud Storage.
Habilitar APIs
Habilita las siguientes APIs en tu Google Cloud proyecto:
- API de transferencia de datos
- API Transfer de Storage
Se crea un agente de servicio cuando habilitas la API Data Transfer.
Configurar permisos
- Crea una cuenta de servicio y concédele el rol Administrador de BigQuery (
roles/bigquery.admin
). Esta cuenta de servicio se usa para crear la configuración de la transferencia. - Cuando se habilita la API Data Transfer, se crea un agente de servicio (P4SA). Concédele los siguientes roles:
roles/metastore.metadataOwner
roles/storagetransfer.admin
roles/serviceusage.serviceUsageConsumer
roles/storage.objectViewer
- Si vas a migrar metadatos de tablas Iceberg de BigLake, asígnale los roles
roles/storage.objectAdmin
yroles/bigquery.admin
en lugar deroles/storage.objectViewer
.
- Si vas a migrar metadatos de tablas Iceberg de BigLake, asígnale los roles
Asigna el rol
roles/iam.serviceAccountTokenCreator
al agente de servicio 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
Configurar Storage Transfer Agent
Para configurar el agente de transferencia de Storage necesario para transferir un lago de datos de HDFS, haz lo siguiente:
- Configura los permisos para ejecutar el agente de transferencia de almacenamiento en tu clúster de Hadoop.
- Instala Docker en las máquinas de agente locales.
- Crea un pool de agentes del Servicio de transferencia de Storage en tu Google Cloud proyecto.
- Instala agentes en tus máquinas de agentes locales.
Programar una transferencia de data lake de HDFS
Para programar una transferencia de lago de datos de HDFS, introduce el comando bq mk
y proporciona la marca de creación de transferencia --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"}'
Haz los cambios siguientes:
TRANSFER_NAME
: el nombre visible de la configuración de la transferencia. El nombre de la transferencia puede ser cualquier valor que te permita identificarla si necesitas modificarla más adelante.SERVICE_ACCOUNT
: el nombre de la cuenta de servicio que se usa para autenticar la transferencia. La cuenta de servicio debe ser propiedad del mismoproject_id
que se ha usado para crear la transferencia y debe tener todos los permisos necesarios.PROJECT_ID
: tu ID de proyecto Google Cloud . Si no se proporciona--project_id
para especificar un proyecto concreto, se usará el proyecto predeterminado.REGION
: ubicación de esta configuración de transferencia.LIST_OF_TABLES
: una lista de entidades que se van a transferir. Usa una especificación de nomenclatura jerárquica:database.table
. Este campo admite expresiones regulares 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
: el nombre del grupo de agentes que se usa para crear agentes.DATAPROC_METASTORE
: el almacén de metadatos de Dataproc de destino para el destino de OSS gestionado. Si quieres usar BigLake Metastore, puedes omitir este campo en la configuración de la transferencia. Para obtener más información sobre cómo usar BigLake Metastore para migrar metadatos, consulta Migración de metadatos.
Ejecuta este comando para crear la configuración de la transferencia e iniciar la transferencia del lago de datos de HDFS. Las transferencias se programan para que se ejecuten cada 24 horas de forma predeterminada, pero se pueden configurar con las opciones de programación de transferencias.
Cuando se complete la transferencia, las tablas del clúster de Hadoop se migrarán a MIGRATION_BUCKET
.
Opciones de ingestión de datos
En las siguientes secciones se ofrece más información sobre cómo puede configurar sus transferencias de lagos de datos de HDFS.
Migración de metadatos
Los metadatos se pueden migrar a Dataproc Metastore o a BigLake Metastore, y los datos subyacentes se almacenan en Cloud Storage.
Para transferir metadatos a Dataproc Metastore, especifica la URL de tu metastore en el campo destination_dataproc_metastore
.
Para transferir metadatos a BigLake Metastore, no es necesario que especifiques un campo destination_dataproc_metastore
en la configuración de la transferencia. El sistema determina automáticamente el conjunto de datos de BigQuery de destino a partir del campo targetName
de los archivos de asignación YAML generados.
El campo targetName
tiene el formato de un identificador de dos partes. Por ejemplo, bigquery_dataset_name.bigquery_table_name
. De forma predeterminada, los nombres se ajustarán a los de tu sistema de origen. Debes asegurarte de que el conjunto de datos de BigQuery con el nombre del esquema de origen exista. Si no es así, créalo antes de ejecutar la transferencia.
Para usar otro conjunto de datos de BigQuery, debes proporcionar un archivo YAML de configuración adicional (con el sufijo config.yaml
) en el DUMPER_BUCKET
que contenga un conjunto de reglas de reescritura de objetos y, a continuación, generar las asignaciones de traducción. En el siguiente ejemplo, se muestra un conjunto de reglas que asigna la base de datos de origen llamada my_hive_db
a un conjunto de datos de BigQuery llamado my_bq_dataset
:
relation:
- match:
schema: my_hive_db
outputName:
database: null
schema: my_bq_dataset
El parámetro schema
debe corresponder al nombre del conjunto de datos de BigQuery y el parámetro relation
debe corresponder al nombre de la tabla. Para obtener más información, consulta Asignación de nombres de salida.
El parámetro database
también debe tener el valor null
.
Transferencias incrementales
Cuando se configura una transferencia con una programación periódica, cada transferencia posterior actualiza la tabla de Google Cloud con los últimos cambios realizados en la tabla de origen. Por ejemplo, todas las operaciones de inserción, eliminación o actualización con cambios en el 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, añade la marca --schedule
a la configuración de la transferencia y especifica una programación de la transferencia con la sintaxis schedule
.
Las transferencias de data lakes de HDFS deben tener un intervalo de al menos 24 horas entre ejecuciones.
En el caso de las transferencias únicas, puedes añadir la marca end_time
a la configuración de la transferencia para que solo se ejecute una vez.
Monitorizar las transferencias de data lakes de HDFS
Después de programar una transferencia de un lago de datos de HDFS, puedes monitorizar la tarea de transferencia con comandos de la herramienta de línea de comandos bq. Para obtener información sobre cómo monitorizar tus trabajos de transferencia, consulta Ver tus transferencias.
Hacer un seguimiento del estado de la migración de tablas
También puedes ejecutar la herramienta dwh-dts-status
para monitorizar el estado de todas las tablas transferidas en una configuración de transferencia o en una base de datos concreta. También puedes usar la herramienta dwh-dts-status
para enumerar todas las configuraciones de transferencia de un proyecto.
Antes de empezar
Para poder usar la herramienta dwh-dts-status
, haz lo siguiente:
Obtén la herramienta
dwh-dts-status
descargando el paquetedwh-migration-tool
del repositorio de GitHubdwh-migration-tools
.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.
Comprueba que el usuario tenga los roles
bigquery.admin
ylogging.viewer
. Para obtener más información sobre los roles de gestión de identidades y accesos, consulta la referencia de control de acceso.
Mostrar todas las configuraciones de transferencia de un proyecto
Para enumerar todas las configuraciones de transferencia de un proyecto, usa el siguiente comando:
./dwh-dts-status --list-transfer-configs --project-id=[PROJECT_ID] --location=[LOCATION]
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto Google Cloud que está ejecutando las transferencias.LOCATION
: la ubicación en la que se creó la configuración de la transferencia.
Este comando genera una tabla con una lista de nombres e IDs de configuración de transferencia.
Ver los estados de todas las tablas de 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]
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto Google Cloud que está ejecutando las transferencias.LOCATION
: la ubicación en la que se creó la configuración de la transferencia.CONFIG_ID
: el ID de la configuración de transferencia especificada.
Este comando genera una tabla con una lista de 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
.
Ver los estados de todas las tablas de una base de datos
Para ver el estado de todas las tablas transferidas de una base de datos específica, usa el siguiente comando:
./dwh-dts-status --list-status-for-database --project-id=[PROJECT_ID] --database=[DATABASE]
Haz los cambios siguientes:
PROJECT_ID
: el ID del proyecto Google Cloud que está ejecutando las transferencias.DATABASE
:el nombre de la base de datos especificada.
Este comando genera una tabla con una lista de 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
.