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 Trusted 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 Trusted 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 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 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
.
Archivos obligatorios
Debes tener los siguientes archivos de migración en un bucket de Cloud Storage antes de poder programar una transferencia de data lake de HDFS:
- El archivo de metadatos extraído (
hive-dumper-output.zip
) - El archivo YAML de configuración de 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 bucket 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 bucket que contiene hive-dumper-output.zip
. Configura el archivo YAML de configuración de traducción para asignar rutas de acceso de HDFS a carpetas administradas de Cloud Storage, de forma similar al siguiente ejemplo:
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 migrados.
El campo location_expression
es una expresión del lenguaje de expresiones comunes (CEL).
Para obtener más información sobre este archivo YAML de configuración, consulta Lineamientos para crear un archivo YAML de configuración.
Genera tablas que asignan archivos YAML
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
Reemplaza lo siguiente:
TRANSLATION_OUTPUT_BUCKET
: Es el URI base de un bucket de Cloud Storage que contendrá el archivo YAML de asignación de tablas. Por ejemplo,gs://output_bucket/tables/
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
.
Cuando se ejecuta, la API del servicio de traducción devuelve un WORKFLOW_ID
y comienza un trabajo asíncrono en segundo plano. Puedes supervisar 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 tus archivos YAML de asignación de tablas. Es posible que tus archivos YAML de asignación de tablas consten de varios archivos de asignación, uno para cada tabla, almacenados en la carpeta de Cloud Storage.
Habilita las APIs
Habilita las siguientes APIs en tu proyecto deTrusted 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.s3ns-system.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 Trusted Cloud by S3NS 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", "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"}'
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
: Es 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
: Es el ID de tu proyecto de Trusted Cloud by S3NS . 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.DATAPROC_METASTORE
: Es el Dataproc Metastore de destino para el destino de OSS administrado. Para usar BigLake Metastore, puedes omitir este campo de la configuración de transferencia. Para obtener más información sobre el uso de BigLake Metastore para migrar metadatos, consulta Migración de metadatos.
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.
Migración de metadatos
Los metadatos se pueden migrar a Dataproc Metastore o 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 al almacén de metadatos de BigLake, no es necesario que especifiques un campo destination_dataproc_metastore
en la configuración de transferencia. El sistema determina automáticamente el conjunto de datos de destino de BigQuery a partir del campo targetName
dentro 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, la nomenclatura se alineará con tu sistema fuente. Debes asegurarte de que exista el conjunto de datos de BigQuery con el nombre del esquema de origen. De lo contrario, 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 DUMPER_BUCKET
que contenga un conjunto de reglas de reescritura de objetos y, luego, 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 establecerse en null
.
Transferencias incrementales
Cuando se configura una transferencia con un programa recurrente, cada transferencia posterior actualiza la tabla en Trusted Cloud by S3NS 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 Trusted Cloud by S3NS 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.
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 los 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 Trusted Cloud by S3NS 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 Trusted Cloud by S3NS 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 Trusted Cloud by S3NS 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 Trusted Cloud by S3NS 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
.