Partilhar via


Migrar metadados do Hive Metastore do Azure Synapse Analytics para o Fabric

A etapa inicial na migração do Hive Metastore (HMS) envolve a determinação dos bancos de dados, tabelas e partições que você deseja transferir. Não é necessário migrar tudo; Você pode selecionar bancos de dados específicos. Ao identificar bancos de dados para migração, verifique se há tabelas do Spark gerenciadas ou externas.

Para obter considerações sobre o HMS, consulte as diferenças entre o Azure Synapse Spark e o Fabric.

Nota

Como alternativa, se o ADLS Gen2 contiver tabelas Delta, você poderá criar um atalho OneLake para uma tabela Delta no ADLS Gen2.

Pré-requisitos

Opção 1: Exportar e importar HMS para metastore lakehouse

Siga estas etapas principais para a migração:

  • Etapa 1: Exportar metadados do HMS de origem
  • Etapa 2: Importar metadados para o Fabric lakehouse
  • Etapas pós-migração: validar conteúdo

Nota

Os scripts copiam apenas objetos do catálogo do Spark para o Fabric lakehouse. A suposição é que os dados já estão copiados (por exemplo, do local do depósito para o ADLS Gen2) ou disponíveis para tabelas gerenciadas e externas (por exemplo, por meio de atalhos—preferencial) para o lago Fabric.

Etapa 1: Exportar metadados do HMS de origem

O foco da Etapa 1 é exportar os metadados do HMS de origem para a seção Arquivos do seu lago de malha. Este processo é o seguinte:

  • 1.1) Importe o bloco de anotações de exportação de metadados do HMS para seu espaço de trabalho do Azure Synapse. Este bloco de anotações consulta e exporta metadados HMS de bancos de dados, tabelas e partições para um diretório intermediário no OneLake (funções ainda não incluídas). A API de catálogo interno do Spark é usada neste script para ler objetos de catálogo.

  • 1.2) Configure os parâmetros no primeiro comando para exportar informações de metadados para um armazenamento intermediário (OneLake). O trecho a seguir é usado para configurar os parâmetros de origem e destino. Certifique-se de substituí-los por seus próprios valores.

    
    // Azure Synapse workspace config
    var SynapseWorkspaceName = "<synapse_workspace_name>"
    
    var DatabaseNames = "<db1_name>;<db2_name>"
    var SkipExportTablesWithUnrecognizedType:Boolean = false
    
    // Fabric config
    var WorkspaceId = "<workspace_id>"
    var LakehouseId = "<lakehouse_id>"
    var ExportFolderName = f"export/${SynapseWorkspaceName}/sparkCatalogMetadata"
    
    var OutputFolder = f"abfss://${WorkspaceId}@onelake.dfs.fabric.microsoft.com/${LakehouseId}/Files/${ExportFolderName}/"
    
    
  • 1.3) Execute todos os comandos do notebook para exportar objetos de catálogo para o OneLake. Quando as células são concluídas, essa estrutura de pastas sob o diretório de saída intermediário é criada.

    Captura de tela mostrando a exportação do HMS no OneLake.

Etapa 2: Importar metadados para o Fabric lakehouse

A etapa 2 é quando os metadados reais são importados do armazenamento intermediário para o Fabric lakehouse. A saída desta etapa é ter todos os metadados do HMS (bancos de dados, tabelas e partições) migrados. Este processo é o seguinte:

  • 2.1) Crie um atalho dentro da seção "Arquivos" da casa do lago. Esse atalho precisa apontar para o diretório de armazém do Spark de origem e é usado posteriormente para fazer a substituição das tabelas gerenciadas pelo Spark. Veja exemplos de atalhos apontando para o diretório de armazém do Spark:

    • Caminho de atalho para o diretório de armazém do Azure Synapse Spark: abfss://<container>@<storage_name>.dfs.core.windows.net/synapse/workspaces/<workspace_name>/warehouse
    • Caminho de atalho para o diretório de depósito do Azure Databricks: dbfs:/mnt/<warehouse_dir>
    • Caminho de atalho para o diretório de armazém do HDInsight Spark: abfss://<container>@<storage_name>.dfs.core.windows.net/apps/spark/warehouse
  • 2.2) Importe o notebook de importação de metadados do HMS para o espaço de trabalho do Fabric. Importe este bloco de anotações para importar objetos de banco de dados, tabela e partição do armazenamento intermediário. A API de catálogo interno do Spark é usada neste script para criar objetos de catálogo no Fabric.

  • 2.3) Configure os parâmetros no primeiro comando. No Apache Spark, quando você cria uma tabela gerenciada, os dados dessa tabela são armazenados em um local gerenciado pelo próprio Spark, normalmente dentro do diretório de depósito do Spark. A localização exata é determinada pela Spark. Isso contrasta com tabelas externas, onde você especifica o local e gerencia os dados subjacentes. Quando você migra os metadados de uma tabela gerenciada (sem mover os dados reais), os metadados ainda contêm as informações de local originais apontando para o diretório de depósito antigo do Spark. Assim, para tabelas gerenciadas, WarehouseMappings é usado para fazer a substituição usando o atalho criado na Etapa 2.1. Todas as tabelas gerenciadas de origem são convertidas como tabelas externas usando esse script. LakehouseId refere-se à casa do lago criada na Etapa 2.1 contendo atalhos.

    
    // Azure Synapse workspace config
    var ContainerName = "<container_name>"
    var StorageName = "<storage_name>"
    var SynapseWorkspaceName = "<synapse_workspace_name>"
    
    // Fabric config
    var WorkspaceId = "<workspace_id>"
    var LakehouseId = "<lakehouse_id>"
    var ExportFolderName = f"export/${SynapseWorkspaceName}/sparkCatalogMetadata"
    var ShortcutName = "<warehouse_dir_shortcut_name>"
    
    var WarehouseMappings:Map[String, String] = Map(
        f"abfss://${ContainerName}@${StorageName}.dfs.core.windows.net/synapse/workspaces/${SynapseWorkspaceName}/warehouse"-> f"abfss://${WorkspaceId}@onelake.dfs.fabric.microsoft.com/${LakehouseId}/Files/${ShortcutName}"
    )
    
    var OutputFolder = f"abfss://${WorkspaceId}@onelake.dfs.fabric.microsoft.com/${LakehouseId}/Files/${ExportFolderName}/"
    
    var DatabasePrefix = ""
    var TablePrefix = ""
    var IgnoreIfExists = true
    
    
  • 2.4) Execute todos os comandos do notebook para importar objetos de catálogo do caminho intermediário.

Nota

Ao importar vários bancos de dados, você pode (i) criar um lakehouse por banco de dados (a abordagem usada aqui) ou (ii) mover todas as tabelas de bancos de dados diferentes para um único lakehouse. Para este último, todas as tabelas migradas podem ser <lakehouse>.<db_name>_<table_name>, e você precisará ajustar o bloco de anotações de importação de acordo.

Etapa 3: Validar o conteúdo

A etapa 3 é onde você valida que os metadados foram migrados com êxito. Veja diferentes exemplos.

Você pode ver os bancos de dados importados executando:

%%sql
SHOW DATABASES

Você pode verificar todas as tabelas em um lakehouse (banco de dados) executando:

%%sql
SHOW TABLES IN <lakehouse_name>

Você pode ver os detalhes de uma tabela específica executando:

%%sql
DESCRIBE EXTENDED <lakehouse_name>.<table_name>

Como alternativa, todas as tabelas importadas são visíveis na seção Lakehouse explorer UI Tables para cada lakehouse.

Captura de tela mostrando metadados do HMS importados na casa do lago.

Outras considerações

  • Escalabilidade: A solução aqui está usando a API de catálogo interna do Spark para fazer importação/exportação, mas não está se conectando diretamente ao HMS para obter objetos de catálogo, portanto, a solução não pode ser bem dimensionada se o catálogo for grande. Você precisaria alterar a lógica de exportação usando o HMS DB.
  • Precisão dos dados: não há garantia de isolamento, o que significa que, se o mecanismo de computação Spark estiver fazendo modificações simultâneas no metastore enquanto o bloco de anotações de migração estiver em execução, dados inconsistentes poderão ser introduzidos no Fabric lakehouse.