Compartilhar via


Migrar o Apache HBase para uma nova versão e conta de armazenamento

Este artigo discute como atualizar seu cluster do Apache HBase no Azure HDInsight para uma versão mais recente com uma conta diferente do de Armazenamento do Azure.

Este artigo se aplica somente se você precisar usar contas de armazenamento diferentes para seus clusters de origem e de destino. Para atualizar versões com a mesma conta de armazenamento para seus clusters de origem e de destino, confira Migrar o Apache HBase para uma nova versão.

O tempo de inatividade durante a atualização deve ser de apenas alguns minutos. Esse tempo de inatividade é causado pelas etapas para liberar todos os dados na memória e o tempo para configurar e reiniciar os serviços no novo cluster. Os resultados vão variar, dependendo do número de nós, da quantidade de dados e de outras variáveis.

Revisar a compatibilidade do Apache HBase

Antes de atualizar o Apache HBase, verifique se as versões do HBase nos clusters de origem e destino são compatíveis. Revise a matriz de compatibilidade e as notas sobre a versão do HBase no Guia de Referência do HBase para verificar se o aplicativo é compatível com a nova versão.

Veja um exemplo de matriz de compatibilidade. Y indica compatibilidade e N indica uma potencial incompatibilidade:

Tipo de compatibilidade Versão principal Versão secundária Patch
Compatibilidade de transferência cliente-servidor N S S
Compatibilidade servidor-servidor N S S
Compatibilidade de formato de arquivo N S S
Compatibilidade de API do cliente N S S
Compatibilidade de binário do cliente N N S
Compatibilidade de API limitada ao lado do servidor
Estável N S S
Evoluindo N N S
Instável N N N
Compatibilidade de dependência N S S
Compatibilidade operacional N N Y

Qualquer incompatibilidade significativa deve ser descrita nas notas sobre a versão do HBase. Teste seu aplicativo em um cluster que esteja executando a versão de destino do HDInsight e do HBase.

Para saber mais sobre as versões e a compatibilidade do HDInsight, confira Versões do Azure HDInsight.

Visão geral da migração de cluster do Apache HBase

Para atualizar e migrar seu cluster do Apache HBase no Azure HDInsight para uma nova conta de armazenamento, conclua as etapas básicas a seguir. Para obter instruções detalhadas, confira as etapas e comandos detalhados.

Prepare o cluster de origem:

  1. Interrompa a ingestão de dados.
  2. Liberar memstore dados.
  3. Interrompa o HBase no Ambari.
  4. Para clusters com gravações aceleradas, faça o back-up do diretório WAL (Write Ahead Log).

Prepare o cluster de destino:

  1. Crie o cluster de destino.
  2. Interrompa o HBase no Ambari.
  3. Limpe os dados do Zookeeper.
  4. Alterne o usuário para o HBase.

Conclua a migração:

  1. Limpe o sistema de arquivos de destino, migre os dados e remova /hbase/hbase.id.
  2. Limpe e migre o WAL.
  3. Inicie todos os serviços no cluster de destino do Ambari.
  4. Verifique o HBase.
  5. Exclua o cluster de origem.

Comandos e etapas de migração detalhadas

Use estas etapas e comandos detalhados para migrar o cluster do Apache HBase com uma nova conta de armazenamento.

Prepare o cluster de origem

  1. Interrompa a ingestão para o cluster de origem do HBase.

  2. Libere o cluster de origem do HBase que você está atualizando.

    O HBase grava dados de entrada em um repositório na memória chamado memstore. Depois de memstore atingir um determinado tamanho, o HBase o libera em disco para armazenamento de longo prazo na conta de armazenamento do cluster. A exclusão do cluster de origem após uma atualização também exclui todos os dados no memstores. Para manter os dados, libere manualmente o memstore de cada tabela para o disco antes de atualizar.

    Você pode liberar os memstore dados executando o script flush_all_tables.sh do repositório GitHub do hbase-utils.

    Você também pode liberar os memstore dados executando o seguinte comando de shell do HBase de dentro do cluster HDInsight:

    hbase shell
    flush "<table-name>"
    
  3. Faça logon no Apache Ambari no cluster de origem com https://<OLDCLUSTERNAME>.azurehdinsight.net e interrompa os serviços do HBase.

  4. No prompt de confirmação, selecione a caixa para ativar o modo de manutenção do HBase.

    Para saber mais sobre como usar e conectar-se ao Ambari, confira Gerenciar clusters HDInsight usando a interface de usuário do Ambari Web.

  5. Se o cluster de origem do HBase não tiver o recurso Gravações Aceleradas, ignore esta etapa. Em clusters de origem do HBase com Gravações Aceleradas, faça o back-up do diretório WAL no HDFS executando os comandos a seguir em uma sessão SSH em qualquer nó do Zookeeper no cluster de origem ou nó de trabalho.

    hdfs dfs -mkdir /hbase-wal-backup
    hdfs dfs -cp hdfs://mycluster/hbasewal /hbase-wal-backup
    

Prepare o cluster de destino

  1. No portal do Azure, configure um novo cluster de destino do HDInsight que usa uma conta de armazenamento diferente do cluster de origem.

  2. Faça logon no Apache Ambari no cluster novo em https://<NEWCLUSTERNAME>.azurehdinsight.net e interrompa os serviços do HBase.

  3. Limpe os dados do Zookeeper no cluster de destino executando os seguintes comandos em qualquer nó do Zookeeper ou nó de trabalho:

    hbase zkcli
    rmr /hbase-unsecure
    quit
    
  4. Alterne o usuário para o HBase executando sudo su hbase.

Limpar e migrar o sistema de arquivos e o WAL

Execute os comandos a seguir, dependendo da versão do HDI de origem e se os clusters de origem e de destino têm Gravações Aceleradas. O cluster de destino é sempre HDI versão 4.0, pois o HDI 3.6 está em suporte Básico e não é recomendado para novos clusters.

O <container-endpoint-url> da conta de armazenamento é https://<storageaccount>.blob.core.windows.net/<container-name>. Passe o token SAS para a conta de armazenamento no final da URL.

  • O <container-fullpath> do tipo de armazenamento WASB é wasbs://<container-name>@<storageaccount>.blob.core.windows.net
  • O <container-fullpath> para o tipo de armazenamento Azure Data Lake Storage Gen2 é abfs://<container-name>@<storageaccount>.dfs.core.windows.net.

Comandos de cópia

O comando de cópia do HDFS é hdfs dfs <copy properties starting with -D> -cp

Use hadoop distcp para melhorar o desempenho ao copiar arquivos que não estão em um blob de páginas: hadoop distcp <copy properties starting with -D>

Para passar a chave da conta de armazenamento, use:

  • -Dfs.azure.account.key.<storageaccount>.blob.core.windows.net='<storage account key>'
  • -Dfs.azure.account.keyprovider.<storageaccount>.blob.core.windows.net=org.apache.hadoop.fs.azure.SimpleKeyProvider

Você também pode usar AzCopy para melhorar o desempenho ao copiar arquivos de dados do HBase.

  1. Execute o comando AzCopy:

    azcopy cp "<source-container-endpoint-url>/hbase" "<target-container-endpoint-url>" --recursive
    
  2. Se a conta de armazenamento de destino for o Armazenamento de Blobs do Azure, siga esta etapa após a cópia. Se a conta de armazenamento de destino for o Data Lake Storage Gen2, ignore esta etapa.

    O driver WASB do Hadoop usa blobs especiais de tamanho 0 correspondentes a cada diretório. O AzCopy ignora esses arquivos ao fazer a cópia. Algumas operações WASB usam esses blobs, portanto, você deve criar esses blobs no cluster de destino. Para criar os blobs, execute o seguinte comando do Hadoop em qualquer nó no cluster de destino:

    sudo -u hbase hadoop fs -chmod -R 0755 /hbase
    

Você pode baixar o AzCopy em Introdução ao AzCopy. Para saber mais sobre o uso do AzCopy, confira azcopy copy.

O cluster de origem é HDI 3.6 ou HDI 4.0 com Gravações Aceleradas e o cluster de destino tem Gravações Aceleradas

  1. Para limpar o sistema de arquivos e migrar dados, execute os seguintes comandos:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. Remova hbase.id executando hdfs dfs -rm /hbase/hbase.id

  3. Para limpar e migrar o WAL, execute os seguintes comandos:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal
    hdfs dfs -cp <source-container-fullpath>/hbase-wal-backup/hbasewal hdfs://<destination-cluster>/hbasewal
    

O cluster de origem é HDI 3.6 sem Gravações Aceleradas e o cluster de destino tem Gravações Aceleradas

  1. Para limpar o sistema de arquivos e migrar dados, execute os seguintes comandos:

    hdfs dfs -rm -r /hbase 
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase /
    hdfs dfs -rm -r /hbase/*WALs
    
  2. Remova hbase.id executando hdfs dfs -rm /hbase/hbase.id

  3. Para limpar e migrar o WAL, execute os seguintes comandos:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal/*
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase/*WALs hdfs://<destination-cluster>/hbasewal
    

O cluster de origem é HDI 3.6 sem Gravações Aceleradas e o cluster de destino não tem Gravações Aceleradas

  1. Para limpar o sistema de arquivos e migrar dados, execute os seguintes comandos:

    hdfs dfs -rm -r /hbase 
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase /
    hdfs dfs -rm -r /hbase/*WALs
    
  2. Remova hbase.id executando hdfs dfs -rm /hbase/hbase.id

  3. Para limpar e migrar o WAL, execute os seguintes comandos:

    hdfs dfs -rm -r /hbase-wals/*
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase/WALs,/hbase/MasterProcWALs,/hbase/oldWALs,/hbase-wals" -cp <source-container-fullpath>/hbase/*WALs /hbase-wals
    

O cluster de origem é HDI 4.0 sem Gravações Aceleradas e o cluster de destino tem Gravações Aceleradas

  1. Para limpar o sistema de arquivos e migrar dados, execute os seguintes comandos:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. Remova hbase.id executando hdfs dfs -rm /hbase/hbase.id

  3. Para limpar e migrar o WAL, execute os seguintes comandos:

    hdfs dfs -rm -r hdfs://<destination-cluster>/hbasewal
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals hdfs://<destination-cluster>/hbasewal
    

O cluster de origem é HDI 4.0 sem Gravações Aceleradas e o cluster de destino não tem Gravações Aceleradas

  1. Para limpar o sistema de arquivos e migrar dados, execute os seguintes comandos:

    hdfs dfs -rm -r /hbase 
    hadoop distcp <source-container-fullpath>/hbase /
    
  2. Remova hbase.id executando hdfs dfs -rm /hbase/hbase.id

  3. Para limpar e migrar o WAL, execute os seguintes comandos:

    hdfs dfs -rm -r /hbase-wals/*
    hdfs dfs -Dfs.azure.page.blob.dir="/hbase-wals" -cp <source-container-fullpath>/hbase-wals /
    

Concluir a migração

  1. No cluster de destino, salve suas alterações e reinicie todos os serviços necessários, conforme indicado pelo Ambari.

  2. Aponte seu aplicativo para o cluster de destino.

    Observação

    O nome DNS estático das alterações de aplicativo durante a atualização. Em vez de fazer hard-coding deste nome DNS, você pode configurar um CNAME nas configurações de DNS do nome de domínio que aponta para o nome do cluster. Outra opção é usar um arquivo de configuração para o aplicativo que você pode atualizar sem reimplantação.

  3. Inicie a ingestão.

  4. Verifique a consistência do HBase e as operações DDL (Linguagem de Definição de Dados) e DML (Linguagem de Manipulação de Dados).

  5. Se o cluster de destino for satisfatório, exclua o cluster de origem.

Próximas etapas

Para saber mais sobre o Apache HBase e como atualizar clusters do HDInsight, consulte os artigos a seguir: