Migre tabelas de um lago de dados HDFS
Este documento mostra como migrar as tabelas do data lake do Apache Hadoop Distributed File System (HDFS) para o Google Cloud.
Pode usar o conetor de migração do data lake do HDFS no Serviço de transferência de dados do BigQuery para migrar as suas tabelas do Hive e Iceberg de várias distribuições do Hadoop, tanto em ambientes nas instalações como na nuvem, para o Google Cloud.
Com o conetor do lago de dados HDFS, pode registar as tabelas do lago de dados HDFS no Dataproc Metastore e no BigLake metastore enquanto usa o Cloud Storage como armazenamento subjacente para os seus ficheiros.
O diagrama seguinte apresenta uma vista geral do processo de migração de tabelas do cluster Hadoop.
Limitações
As transferências de data lakes do HDFS estão sujeitas às seguintes limitações:
- Para migrar tabelas Iceberg, tem de registar as tabelas no metastore do BigLake para permitir o acesso de escrita para motores de código aberto (como o Spark ou o Flink) e permitir o acesso de leitura para o BigQuery.
- Para migrar tabelas do Hive, tem de registar as tabelas no Dataproc Metastore para permitir o acesso de escrita para motores de código aberto e o acesso de leitura para o BigQuery.
- Tem de usar a ferramenta de linha de comandos bq para migrar uma tabela de data lake do HDFS para o BigQuery.
Antes de começar
Antes de agendar uma transferência do data lake do HDFS, tem de fazer o seguinte:
Crie um contentor do Cloud Storage para ficheiros migrados
Crie um contentor do Cloud Storage que vai ser o destino dos ficheiros do lago de dados migrados. Este contentor é referido neste documento como MIGRATION_BUCKET
.
Gere um ficheiro de metadados para o Apache Hive
Execute a ferramenta dwh-migration-dumper
para extrair metadados
para o Apache Hive. A ferramenta gera um ficheiro denominado hive-dumper-output.zip
num contentor do Cloud Storage, referido neste documento como DUMPER_BUCKET
.
Ativar APIs
Ative as seguintes APIs no seu Google Cloud projeto:
- API da Transferência de dados
- API Storage Transfer
É criado um agente de serviço quando ativa a API Data Transfer.
Configure autorizações
- Crie uma conta de serviço e atribua-lhe a função de administrador do BigQuery (
roles/bigquery.admin
). Esta conta de serviço é usada para criar a configuração de transferência. - É criado um agente de serviço (P4SA) quando ativa a API Data Transfer. Conceda-lhe as seguintes funções:
roles/metastore.metadataOwner
roles/storagetransfer.admin
roles/serviceusage.serviceUsageConsumer
roles/storage.objectViewer
- Se estiver a migrar metadados para tabelas Iceberg do BigLake, conceda-lhe as funções
roles/storage.objectAdmin
eroles/bigquery.admin
em vez deroles/storage.objectViewer
.
- Se estiver a migrar metadados para tabelas Iceberg do BigLake, conceda-lhe as funções
Conceda à função do agente do serviço
roles/iam.serviceAccountTokenCreator
com o seguinte 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
Configure o Storage Transfer Agent
Para configurar o agente de transferência de armazenamento necessário para uma transferência do lago de dados do HDFS, faça o seguinte:
- Configure as autorizações para executar o agente de transferência de armazenamento no seu cluster Hadoop.
- Instale o Docker em máquinas de agentes no local.
- Crie um conjunto de agentes do serviço de transferência de armazenamento no seu projeto Google Cloud .
- Instale agentes nas suas máquinas de agentes no local.
Agende uma transferência de lago de dados do HDFS
Para agendar uma transferência do lago de dados do HDFS, introduza 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 o seguinte:
TRANSFER_NAME
: o nome a apresentar da configuração de transferência. O nome da transferência pode ser qualquer valor que lhe permita identificar a transferência se precisar de a modificar mais tarde.SERVICE_ACCOUNT
: o nome da conta de serviço usado para autenticar a sua transferência. A conta de serviço deve ser propriedade da mesma conta de gestor que foiproject_id
usada para criar a transferência e deve ter todas as autorizações necessárias.PROJECT_ID
: o ID do seu Google Cloud projeto. Se o--project_id
não for fornecido para especificar um projeto em particular, é usado o projeto predefinido.REGION
: localização desta configuração de transferência.LIST_OF_TABLES
: uma lista de entidades a transferir. Use uma especificação de nomenclatura hierárquica:database.table
. Este campo suporta a expressão regular RE2 para especificar tabelas. Por exemplo:db1..*
: especifica todas as tabelas na base de dadosdb1.table1;db2.table2
: uma lista de tabelas
AGENT_POOL_NAME
: o nome do conjunto de agentes usado para criar agentes.DUMPER_BUCKET
: o contentor do Cloud Storage que contém o ficheirohive-dumper-output.zip
.MIGRATION_BUCKET
: caminho do GCS de destino para o qual todos os ficheiros subjacentes vão ser carregados.Os metadados podem ser migrados para o Dataproc Metastore ou o metastore do BigLake com os dados subjacentes armazenados no Cloud Storage. Pode especificar o destino através de um dos seguintes parâmetros:
- Para transferir metadados para o Dataproc Metastore, use o parâmetro
destination_dataproc_metastore
e especifique o URL para o seu metastore emDATAPROC_METASTORE
. - Em alternativa, para transferir metadados para o metastore do BigLake, use o parâmetro
destination_bigquery_dataset
e especifique o conjunto de dados do BigQuery emBIGLAKE_METASTORE
.
- Para transferir metadados para o Dataproc Metastore, use o parâmetro
TRANSLATION_OUTPUT_BUCKET
: (Opcional) Especifique um contentor do Cloud Storage para o resultado da tradução. Para mais informações, consulte o artigo Usar o resultado da tradução.
Execute este comando para criar a configuração de transferência e iniciar a transferência do lago de dados do HDFS. As transferências são agendadas para serem executadas a cada 24 horas por predefinição, mas podem ser configuradas com opções de agendamento de transferências.
Quando a transferência estiver concluída, as suas tabelas no cluster Hadoop são migradas para o MIGRATION_BUCKET
.
Opções de carregamento de dados
As secções seguintes fornecem mais informações sobre como pode configurar as suas transferências do data lake do HDFS.
Transferências incrementais
Quando uma configuração de transferência é configurada com um agendamento recorrente, todas as transferências subsequentes atualizam a tabela no Google Cloud com as atualizações mais recentes feitas à tabela de origem. Por exemplo, todas as operações de inserção, eliminação ou atualização com alterações ao esquema são refletidas em Google Cloud com cada transferência.
Opções de agendamento de transferências
Por predefinição, as transferências são agendadas para serem executadas a cada 24 horas. Para configurar a frequência com que as transferências são executadas, adicione a flag --schedule
à configuração de transferência e especifique uma programação de transferência com a sintaxe schedule
.
As transferências do data lake do HDFS têm de ter um mínimo de 24 horas entre execuções de transferências.
Para transferências únicas, pode adicionar a flag end_time
à configuração de transferência para executar a transferência apenas uma vez.
Configure a saída da tradução
Pode configurar um caminho do Cloud Storage e uma base de dados únicos para cada tabela migrada. Para tal, siga os passos seguintes para gerar um ficheiro YAML de mapeamento de tabelas que pode usar na configuração de transferência.
Crie um ficheiro YAML de configuração (com o sufixo
config.yaml
) na pastaDUMPER_BUCKET
que contenha o seguinte:type: object_rewriter relation: - match: relationRegex: ".*" external: location_expression: "'gs://MIGRATION_BUCKET/' + table.schema + '/' + table.name"
- Substitua
MIGRATION_BUCKET
pelo nome do contentor do Cloud Storage que é o destino dos ficheiros de tabelas migrados. O campolocation_expression
é uma expressão do idioma de expressão comum (IEC).
- Substitua
Crie outro ficheiro YAML de configuração (com o sufixo
config.yaml
) no diretórioDUMPER_BUCKET
que contenha o seguinte:type: experimental_object_rewriter relation: - match: schema: SOURCE_DATABASE outputName: database: null schema: TARGET_DATABASE
- Substitua
SOURCE_DATABASE
eTARGET_DATABASE
pelo nome da base de dados de origem e da base de dados do Dataproc Metastore ou do conjunto de dados do BigQuery, consoante o metastore escolhido. Certifique-se de que o conjunto de dados do BigQuery existe se estiver a configurar o metastore do BigLake.
Para mais informações sobre este YAML de configuração, consulte as diretrizes para criar um ficheiro YAML de configuração.
- Substitua
Gere o ficheiro YAML de mapeamento de tabelas através do 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 o seguinte:
TRANSLATION_OUTPUT_BUCKET
: (Opcional) Especifique um contentor do Cloud Storage para o resultado da tradução. Para mais informações, consulte o artigo Usar o resultado da tradução.DUMPER_BUCKET
: o URI base do contentor do Cloud Storage que contém o ficheiro YAML dehive-dumper-output.zip
e configuração.TOKEN
: o token OAuth. Pode gerar este ficheiro na linha de comandos com o comandogcloud auth print-access-token
.PROJECT_ID
: o projeto para processar a tradução.LOCATION
: a localização onde o trabalho é processado. Por exemplo,eu
ouus
.
Monitorize o estado desta tarefa. Quando estiver concluído, é gerado um ficheiro de mapeamento para cada tabela na base de dados num caminho predefinido em
TRANSLATION_OUTPUT_BUCKET
.
Monitorize as transferências do lago de dados do HDFS
Depois de agendar uma transferência de data lake do HDFS, pode monitorizar a tarefa de transferência com comandos da ferramenta de linhas de comando bq. Para obter informações sobre como monitorizar as tarefas de transferência, consulte o artigo Veja as suas transferências.
Monitorize o estado da migração de tabelas
Também pode executar a ferramenta dwh-dts-status
para monitorizar o estado de todas as tabelas transferidas numa configuração de transferência ou numa base de dados específica. Também pode usar a ferramenta dwh-dts-status
para listar todas as configurações de transferência num projeto.
Antes de começar
Antes de poder usar a ferramenta dwh-dts-status
, faça o seguinte:
Obtenha a ferramenta
dwh-dts-status
transferindo o pacotedwh-migration-tool
dodwh-migration-tools
repositório do GitHub.Autentique a sua conta para Google Cloud com o seguinte comando:
gcloud auth application-default login
Para mais informações, consulte o artigo Como funcionam as Credenciais padrão da aplicação.
Verifique se o utilizador tem a função
bigquery.admin
elogging.viewer
. Para mais informações sobre as funções de IAM, consulte o artigo Referência de controlo de acesso.
Apresenta todas as configurações de transferência num projeto
Para apresentar uma lista de todas as configurações de transferência num projeto, use o seguinte comando:
./dwh-dts-status --list-transfer-configs --project-id=[PROJECT_ID] --location=[LOCATION]
Substitua o seguinte:
PROJECT_ID
: o ID do projeto Google Cloud que está a executar as transferências.LOCATION
: a localização onde a configuração de transferência foi criada.
Este comando gera uma tabela com uma lista de nomes e IDs de configuração de transferência.
Veja os estados de todas as tabelas numa configuração
Para ver o estado de todas as tabelas incluídas numa configuração de transferência, use o seguinte comando:
./dwh-dts-status --list-status-for-config --project-id=[PROJECT_ID] --config-id=[CONFIG_ID] --location=[LOCATION]
Substitua o seguinte:
PROJECT_ID
: o ID do projeto Google Cloud que está a executar as transferências.LOCATION
: a localização onde a configuração de transferência foi criada.CONFIG_ID
: o ID da configuração de transferência especificada.
Este comando gera uma tabela com uma lista de tabelas e o respetivo estado de transferência na configuração de transferência especificada. O estado da transferência pode ter um dos seguintes valores: PENDING
, RUNNING
, SUCCEEDED
, FAILED
, CANCELLED
.
Veja os estados de todas as tabelas numa base de dados
Para ver o estado de todas as tabelas transferidas de uma base de dados específica, use o seguinte comando:
./dwh-dts-status --list-status-for-database --project-id=[PROJECT_ID] --database=[DATABASE]
Substitua o seguinte:
PROJECT_ID
: o ID do projeto Google Cloud que está a executar as transferências.DATABASE
:o nome da base de dados especificada.
Este comando gera uma tabela com uma lista de tabelas e o respetivo estado de transferência na base de dados especificada. O estado da transferência pode ter um dos seguintes valores: PENDING
, RUNNING
, SUCCEEDED
, FAILED
, CANCELLED
.