Partilhar via


Migrar A BD do metastore do Hive predefinida para a BD do metastore externo

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

Por que migrar para o banco de dados de metastore externo

  • O banco de dados de metastore padrão é limitado a SKU básico e não pode lidar com cargas de trabalho em escala de produção.

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

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

O banco de dados de metastore padrão com capacidade de computação limitada, portanto, recomendamos baixa utilização de outros trabalhos no cluster durante a migração de metadados.

Os DBs de origem e de destino devem usar a mesma versão do HDInsight e as mesmas Contas de Armazenamento. Se estiver atualizando as versões do HDInsight de 3.6 para 4.0, conclua as etapas neste artigo primeiro. Em seguida, siga as etapas oficiais de atualização aqui.

Pré-requisitos

Execute a seguinte ação de script 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 links simbólicos com seus caminhos completos.

Property valor
Bash script URI https://hdiconfigactions.blob.core.windows.net/linuxhivemigrationv01/hive-adl-expand-location-v01.sh
Tipos de nós Head
Parâmetros ""

Migrar com Exportar/Importar usando sqlpackage

Um cluster HDInsight criado somente após 2020-10-15 oferece suporte à Exportação/Importação SQL para o banco de dados de metastore padrão do Hive usando sqlpackageo .

  1. Instale sqlpackage no cluster.

  2. Exporte o banco de dados de metastore padrão para o arquivo BACPAC executando o seguinte comando.

    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. Salve o arquivo BACPAC.

    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 banco de dados de metastore externo em um novo cluster HDInsight.

Migrar usando o script Hive

Os clusters criados antes de 2020-10-15 não suportam exportação/importação do banco de dados de metastore padrão.

Para esses clusters, siga o guia Copiar tabelas do Hive entre Contas de Armazenamento, usando um segundo cluster com um DB de 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 fossem copiadas "profundamente" usando o guia. Você precisa limpar manualmente os dados no contêiner de armazenamento de origem. Podemos, em vez disso, copiar "superficialmente" as tabelas se elas não forem transacionais. Todas as tabelas do Hive no HDInsight 3.6 não são transacionais por padrão, mas apenas 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 tabelas não transacionais superficiais:

  1. Execute hive-ddls.sh de script no nó principal principal do cluster de origem para gerar a DDL para cada tabela do Hive.
  2. A DDL é gravada em um script Hive local chamado /tmp/hdi_hive_ddls.hql. Execute isso no cluster de destino que usa um banco de dados de metastore externo do Hive.

Verifique se todas as tabelas do Hive são importadas

O comando a seguir usa uma consulta SQL no banco de dados 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á faltando no novo banco de dados 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