Migrar tabelas de um data lake do HDFS
Este documento mostra como migrar suas tabelas de data lake do Apache Hadoop Distributed File System (HDFS) para o Cloud de Confiance.
É possível usar o conector de migração do data lake do HDFS no serviço de transferência de dados do BigQuery para migrar suas tabelas do Hive e do Iceberg de várias distribuições do Hadoop, tanto em ambientes locais quanto na nuvem, para o Cloud de Confiance.
Com o conector do data lake do HDFS, é possível registrar as tabelas do data lake do HDFS com o metastore do Dataproc e o metastore do BigLake usando o Cloud Storage como armazenamento subjacente dos arquivos.
O diagrama a seguir fornece uma visão geral do processo de migração de tabelas do cluster do Hadoop.

Limitações
As transferências de data lake do HDFS estão sujeitas às seguintes limitações:
- Para migrar tabelas do Iceberg, registre-as no metastore do BigLake para permitir acesso de gravação para mecanismos de código aberto (como Spark ou Flink) e acesso de leitura para o BigQuery.
- Para migrar tabelas do Hive, é preciso registrá-las no Dataproc Metastore para permitir acesso de gravação para mecanismos de código aberto e acesso de leitura para o BigQuery.
- É necessário usar a ferramenta de linha de comando bq para migrar uma tabela de data lake do HDFS para o BigQuery.
Antes de começar
Antes de programar uma transferência de data lake do HDFS, faça o seguinte:
Criar um bucket do Cloud Storage para arquivos migrados
Crie um bucket do Cloud Storage que será o destino dos arquivos migrados do data lake. Neste documento, esse bucket é chamado de MIGRATION_BUCKET.
Gerar arquivo de metadados para o Apache Hive
Execute a ferramenta dwh-migration-dumper para extrair metadados do Apache Hive. A ferramenta gera um arquivo chamado hive-dumper-output.zip
em um bucket do Cloud Storage, chamado neste documento de DUMPER_BUCKET.
Ativar APIs
Ative as APIs a seguir no projeto Cloud de Confiance :
- API Data Transfer
- API Storage Transfer
Um agente de serviço é criado quando você ativa a API Data Transfer.
Configurar permissões
- Crie uma conta de serviço e conceda a ela o papel de administrador do BigQuery (
roles/bigquery.admin). Essa conta de serviço é usada para criar a configuração de transferência. - Um agente de serviço (P4SA) é criado ao ativar a API Data Transfer. Conceda
os seguintes papéis:
roles/metastore.metadataOwnerroles/storagetransfer.adminroles/serviceusage.serviceUsageConsumerroles/storage.objectViewer- Se você estiver migrando metadados para tabelas do BigLake
Iceberg, conceda as funções
roles/storage.objectAdmineroles/bigquery.adminem vez deroles/storage.objectViewer.
- Se você estiver migrando metadados para tabelas do BigLake
Iceberg, conceda as funções
Conceda ao agente de serviço o papel
roles/iam.serviceAccountTokenCreatorcom o seguinte 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
Configurar o agente de transferência do Storage
Para configurar o agente de transferência de armazenamento necessário para uma transferência de data lake do HDFS, faça o seguinte:
- Configure as permissões para executar o agente de transferência de armazenamento no cluster do Hadoop.
- Instale o Docker nas máquinas de agente locais.
- Crie um pool de agentes do Serviço de transferência do Cloud Storage no seu Cloud de Confiance by S3NS projeto.
- Instale agentes nas máquinas de agentes locais.
Programar uma transferência de data lake do HDFS
Para programar uma transferência de data lake do HDFS, insira o comando bq mk e forneça a flag de criação de transferência --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/" }'
Substitua:
TRANSFER_NAME: o nome de exibição da configuração da transferência. O nome da transferência pode ser qualquer valor que permita identificá-la, caso precise modificá-la mais tarde.SERVICE_ACCOUNT: o nome da conta de serviço usado para autenticar a transferência. A conta de serviço precisa pertencer ao mesmoproject_idusado para criar a transferência e ter todas as permissões necessárias.PROJECT_ID: o ID do projeto Cloud de Confiance by S3NS . Se--project_idnão for fornecido para especificar um projeto determinado, o projeto padrão será usado.REGION: local da configuração de transferência.LIST_OF_TABLES: uma lista de entidades a serem transferidas. Use uma especificação de nomenclatura hierárquica:database.table. Esse campo aceita expressões regulares RE2 para especificar tabelas. Exemplo:db1..*: especifica todas as tabelas no banco de dadosdb1.table1;db2.table2: uma lista de tabelas
AGENT_POOL_NAME: o nome do pool de agentes usado para criar agentes.DUMPER_BUCKET: o bucket do Cloud Storage que contém o arquivohive-dumper-output.zip.MIGRATION_BUCKET: caminho de destino do GCS para onde todos os arquivos subjacentes serão carregados.Os metadados podem ser migrados para o Dataproc Metastore ou o BigLake Metastore com os dados subjacentes armazenados no Cloud Storage. É possível especificar o destino usando um dos seguintes parâmetros:
- Para transferir metadados para o metastore do Dataproc, use o parâmetro
destination_dataproc_metastoree especifique o URL do metastore emDATAPROC_METASTORE. - Para transferir metadados para o metastore do BigLake, use o parâmetro
destination_bigquery_datasete especifique o conjunto de dados do BigQuery emBIGLAKE_METASTORE.
- Para transferir metadados para o metastore do Dataproc, use o parâmetro
TRANSLATION_OUTPUT_BUCKET: (opcional) especifique um bucket do Cloud Storage para a saída da tradução. Para mais informações, consulte Como usar a saída da tradução.
Execute este comando para criar a configuração de transferência e iniciar a transferência do data lake do HDFS. As transferências são programadas para serem executadas a cada 24 horas por padrão, mas podem ser configuradas com opções de programação de transferência.
Quando a transferência for concluída, suas tabelas no cluster do Hadoop serão
migradas para MIGRATION_BUCKET.
Opções de ingestão de dados
As seções a seguir fornecem mais informações sobre como configurar suas transferências de data lake do HDFS.
Transferências incrementais
Quando uma configuração de transferência é definida com uma programação recorrente, cada transferência subsequente atualiza a tabela no Cloud de Confiance by S3NS com as atualizações mais recentes feitas na tabela de origem. Por exemplo, todas as operações de inserção, exclusão ou atualização com mudanças de esquema são refletidas em Cloud de Confiance by S3NS com cada transferência.
Opções de programação de transferência
Por padrão, as transferências são programadas para
ser executadas a cada 24 horas. Para configurar a frequência das transferências,
adicione a flag --schedule à configuração de transferência e especifique uma programação
usando a sintaxe schedule.
As transferências do data lake do HDFS precisam ter um mínimo de 24 horas entre as execuções.
Para transferências únicas, adicione a flag
end_time à configuração de transferência para executar a
transferência apenas uma vez.
Configurar a saída da tradução
É possível configurar um caminho e um banco de dados exclusivos do Cloud Storage para cada tabela migrada. Para isso, siga estas etapas e gere um arquivo YAML de mapeamento de tabelas que pode ser usado na configuração de transferência.
Crie um arquivo YAML de configuração (com o sufixo
config.yaml) noDUMPER_BUCKETque contenha o seguinte:type: object_rewriter relation: - match: relationRegex: ".*" external: location_expression: "'gs://MIGRATION_BUCKET/' + table.schema + '/' + table.name"
- Substitua
MIGRATION_BUCKETpelo nome do bucket do Cloud Storage que é o destino dos arquivos de tabela migrados. O campolocation_expressioné uma expressão da linguagem de expressão comum (CEL).
- Substitua
Crie outro arquivo YAML de configuração (com o sufixo
config.yaml) emDUMPER_BUCKETque contenha o seguinte:type: experimental_object_rewriter relation: - match: schema: SOURCE_DATABASE outputName: database: null schema: TARGET_DATABASE
- Substitua
SOURCE_DATABASEeTARGET_DATABASEpelo nome do banco de dados de origem e do banco de dados do metastore do Dataproc ou do conjunto de dados do BigQuery, dependendo do metastore escolhido. Verifique se o conjunto de dados do BigQuery existe se você estiver configurando o banco de dados para o BigLake Metastore.
Para mais informações sobre esses arquivos YAML de configuração, consulte Diretrizes para criar um arquivo YAML de configuração.
- Substitua
Gere o arquivo YAML de mapeamento de tabelas usando o seguinte 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
Substitua:
TRANSLATION_OUTPUT_BUCKET: (opcional) especifique um bucket do Cloud Storage para a saída da tradução. Para mais informações, consulte Como usar a saída da tradução.DUMPER_BUCKET: o URI de base do bucket do Cloud Storage que contém ohive-dumper-output.zipe o arquivo YAML de configuração.TOKEN: o token OAuth. É possível gerar isso na linha de comando com o comandogcloud auth print-access-token.PROJECT_ID: o projeto que vai processar a tradução.LOCATION: o local em que o job é processado. Por exemplo,euouus.
Monitore o status desse job. Quando concluído, um arquivo de mapeamento é gerado para cada tabela no banco de dados em um caminho predefinido em
TRANSLATION_OUTPUT_BUCKET.
Monitorar transferências de data lake do HDFS
Depois de programar uma transferência de data lake do HDFS, é possível monitorar o job de transferência com comandos da ferramenta de linha de comando bq. Para informações sobre como monitorar seus jobs de transferência, consulte Ver suas transferências.
Acompanhar o status da migração de tabelas
Também é possível executar a ferramenta
dwh-dts-status para monitorar o status de todas as tabelas transferidas em
uma configuração de transferência ou um banco de dados específico. Também é possível usar a ferramenta dwh-dts-status
para listar todas as configurações de transferência em um projeto.
Antes de começar
Antes de usar a ferramenta dwh-dts-status, faça o seguinte:
Baixe o pacote
dwh-migration-tooldo repositóriodwh-migration-toolsdo GitHub para ter a ferramentadwh-dts-status.Autentique sua conta para Cloud de Confiance by S3NS com o seguinte comando:
gcloud auth application-default loginPara mais informações, consulte Como as credenciais padrão do aplicativo funcionam.
Verifique se o usuário tem os papéis
bigquery.adminelogging.viewer. Para mais informações sobre papéis do IAM, consulte Referência de controle de acesso.
Listar todas as configurações de transferência em um projeto
Para listar todas as configurações de transferência em um projeto, use o seguinte comando:
./dwh-dts-status --list-transfer-configs --project-id=[PROJECT_ID] --location=[LOCATION]
Substitua:
PROJECT_ID: o ID do projeto Cloud de Confiance by S3NS que está executando as transferências.LOCATION: o local em que a configuração de transferência foi criada.
Esse comando gera uma tabela com uma lista de nomes e IDs de configurações de transferência.
Ver os status de todas as tabelas em uma configuração
Para conferir o status de todas as tabelas incluídas em uma configuração de transferência, use o comando a seguir:
./dwh-dts-status --list-status-for-config --project-id=[PROJECT_ID] --config-id=[CONFIG_ID] --location=[LOCATION]
Substitua:
PROJECT_ID: o ID do projeto Cloud de Confiance by S3NS que está executando as transferências.LOCATION: o local em que a configuração de transferência foi criada.CONFIG_ID: o ID da configuração de transferência especificada.
Esse comando gera uma tabela com uma lista de tabelas e o status da transferência
na configuração especificada. O status da transferência pode ser um dos
seguintes valores: PENDING, RUNNING, SUCCEEDED, FAILED, CANCELLED.
Conferir os status de todas as tabelas em um banco de dados
Para conferir o status de todas as tabelas transferidas de um banco de dados específico, use o comando a seguir:
./dwh-dts-status --list-status-for-database --project-id=[PROJECT_ID] --database=[DATABASE]
Substitua:
PROJECT_ID: o ID do projeto Cloud de Confiance by S3NS que está executando as transferências.DATABASE:o nome do banco de dados especificado.
Esse comando gera uma tabela com uma lista de tabelas e o status da transferência delas no banco de dados especificado. O status da transferência pode ser um dos
seguintes valores: PENDING, RUNNING, SUCCEEDED, FAILED, CANCELLED.