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.
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
- 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. - 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
yroles/bigquery.admin
en lugar deroles/storage.objectViewer
.
- Si migras metadatos para tablas de Iceberg de BigLake, otórgale los roles
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:
- Configura los permisos para ejecutar el agente de transferencia de almacenamiento en tu clúster de Hadoop.
- Instala Docker en las máquinas de agentes locales.
- Crea un grupo de agentes del Servicio de transferencia de almacenamiento en tu Google Cloud proyecto.
- 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 mismoproject_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 archivohive-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 enDATAPROC_METASTORE
. - Para transferir metadatos al metastore de BigLake, usa el parámetro
destination_bigquery_dataset
y especifica el conjunto de datos de BigQuery enBIGLAKE_METASTORE
.
- Para transferir metadatos a Dataproc Metastore, usa el parámetro
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.
Crea un archivo YAML de configuración (con el sufijo
config.yaml
) enDUMPER_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 campolocation_expression
es una expresión del lenguaje de expresiones comunes (CEL).
- Reemplaza
Crea otro archivo YAML de configuración (con el sufijo
config.yaml
) enDUMPER_BUCKET
que contenga lo siguiente:type: experimental_object_rewriter relation: - match: schema: SOURCE_DATABASE outputName: database: null schema: TARGET_DATABASE
- Reemplaza
SOURCE_DATABASE
yTARGET_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.
- Reemplaza
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 dehive-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 comandogcloud 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
ous
.
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:
Para obtener la herramienta
dwh-dts-status
, descarga el paquetedwh-migration-tool
del repositorio de GitHub dedwh-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.
Verifica que el usuario tenga los roles
bigquery.admin
ylogging.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
.