Migrar o BD do metastore do Hive padrão para BD do metastore externo

Este artigo mostra como migrar metadados de um BD do metastore padrão do Hive para um Banco de Dados SQL externo no HDInsight.

Por que migrar para o BD do metastore externo

  • O BD do metastore padrão é limitado à SKU básica e não pode tratar cargas de trabalho de escala de produção.

  • O BD do metastore externo permite que o cliente dimensione horizontalmente os recursos de computação do Hive adicionando novos clusters do HDInsight compartilhando o mesmo BD do metastore.

  • Para a migração do HDInsight 3.6 para 4.0, é obrigatório migrar metadados para o BD do metastore externo antes de atualizar a versão do esquema do Hive. Consulte Migrar cargas de trabalho do HDinsight 3.6 para o HDinsight 4.0.

Como o BD do metastore padrão tem capacidade de computação limitada, recomendamos baixa utilização de outros trabalhos no cluster durante a migração de metadados.

BDs de fonte e de destino devem usar a mesma versão do HDInsight e as mesmas contas de armazenamento. Se estiver atualizando versões do HDInsight de 3.6 para 4.0, primeiro, conclua as etapas neste artigo. Em seguida, siga as etapas de atualização oficial aqui.

Pré-requisitos

Se estiver usando o Azure Data Lake Storage Gen1, os locais da tabela do Hive provavelmente dependerão das configurações do HDFS do cluster para o Azure Data Lake Storage Gen1. Execute a ação de script a seguir para tornar esses locais portáteis para outros clusters. Consulte Ação de script para um cluster em execução.

A ação é semelhante à substituição de symlinks com seus caminhos completos.

Propriedade Valor
URI do script Bash https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive-adl-expand-location-v01.sh
Tipo(s) de nó Head
Parâmetros ""

Migrar com exportação/importação usando o sqlpackage

Um cluster do HDInsight criado somente após 2020-10-15 dá suporte à exportação/importação de SQL para o BD do metastore padrão do Hive usando o sqlpackage.

  1. Instale o sqlpackage no cluster.

  2. Exporte o BD do metastore padrão para o arquivo BACPAC executando o comando a seguir.

    wget "https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive_metastore_tool.py"
    SQLPACKAGE_FILE='/home/sshuser/sqlpackage/sqlpackage'  # replace with sqlpackage location
    TARGET_FILE='hive.bacpac'
    sudo python hive_metastore_tool.py --sqlpackagefile $SQLPACKAGE_FILE --targetfile $TARGET_FILE
    
  3. Baixe o arquivo BACPAC. Segue uma opção.

    hdfs dfs -mkdir -p /bacpacs
    hdfs dfs -put $TARGET_FILE /bacpacs/
    
  4. Importe o arquivo BACPAC para um novo banco de dados com as etapas listadas aqui.

  5. O novo banco de dados está pronto para ser configurado como um BD do metastore externo em um novo cluster do HDInsight.

Migrar usando o script do Hive

Os clusters criados antes de 2020-10-15 não dão suporte à exportação/importação do BD do metastore padrão.

Para esses clusters, siga o guia Copiar tabelas do Hive entre contas de armazenamento, usando um segundo cluster com um DB do metastore externo do Hive. O segundo cluster pode usar a mesma conta de armazenamento, mas deve usar um novo sistema de arquivos padrão.

Opção para cópia "superficial"

O consumo de armazenamento dobraria quando as tabelas forem "profundas" copiadas usando o guia acima. É necessário limpar manualmente os dados no contêiner de armazenamento de origem. Em vez disso, podemos copiar "superficialmente" as tabelas se elas forem não transacionais. Todas as tabelas do Hive no HDInsight 3.6 são não transacionais por padrão, mas somente as tabelas externas são não transacionais no HDInsight 4.0. As tabelas transacionais devem ser copiadas em profundidade. Siga estas etapas para copiar superficialmente tabelas não transacionais:

  1. Execute o script hive-ddls.sh no cabeçalho primário do cluster de origem para gerar o DDL para cada tabela do Hive.
  2. O DDL é gravado em um script local do Hive chamado /tmp/hdi_hive_ddls.hql. Execute isso no cluster de destino que usa um BD do metastore externo do Hive.

Verificar se todas as tabelas do Hive foram importadas

O comando a seguir usa uma consulta SQL no BD do metastore para imprimir todas as tabelas do Hive e seus locais de dados. Compare as saídas entre clusters novos e antigos para verificar se nenhuma tabela está ausente no novo BD do metastore.

SCRIPT_FNAME='hive_metastore_tool.py'
SCRIPT="/tmp/$SCRIPT_FNAME"
wget -O "$SCRIPT" "https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/$SCRIPT_FNAME"
OUTPUT_FILE='/tmp/hivetables.csv'
QUERY="SELECT DBS.NAME, TBLS.TBL_NAME, SDS.LOCATION FROM SDS, TBLS, DBS WHERE TBLS.SD_ID = SDS.SD_ID AND TBLS.DB_ID = DBS.DB_ID ORDER BY DBS.NAME, TBLS.TBL_NAME ASC;"
sudo python "$SCRIPT" --query "$QUERY" > $OUTPUT_FILE

Leitura adicional