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

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

Este artigo se aplica somente se você precisar usar contas de armazenamento diferentes para seus clusters de origem e destino. Para atualizar versões com a mesma conta de armazenamento para seus clusters de origem e destino, consulte 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 pelo tempo para configurar e reiniciar os serviços no novo cluster. Os resultados variam, dependendo do número de nós, quantidade de dados e outras variáveis.

Revise 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. Analise a matriz de compatibilidade da versão do HBase e as notas de versão no Guia de Referência do HBase para verificar se seu aplicativo é compatível com a nova versão.

Aqui está 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 fio cliente-servidor N Y Y
Compatibilidade servidor-servidor N Y Y
Compatibilidade de formato de ficheiro N Y Y
Compatibilidade com a API do cliente N Y Y
Compatibilidade binária do cliente N N Y
Compatibilidade limitada de API do lado do servidor
Estável N Y Y
Evolução N N Y
Instável N N N
Compatibilidade de dependência N Y Y
Compatibilidade operacional N N Y

As notas de versão da versão do HBase devem descrever quaisquer incompatibilidades de quebra. Teste seu aplicativo em um cluster que executa a versão de destino do HDInsight e do HBase.

Para obter mais informações sobre versões e compatibilidade do HDInsight, consulte Versões do Azure HDInsight.

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

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

Prepare o cluster de origem:

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

Prepare o cluster de destino:

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

Conclua a migração:

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

Etapas e comandos detalhados de migração

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

Preparar o cluster de origem

  1. Pare a ingestão no cluster HBase de origem.

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

    O HBase grava dados de entrada em um armazenamento na memória chamado memstore. Depois de atingir um determinado tamanho, o memstore HBase o libera no 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 reter os dados, libere manualmente cada tabela no disco antes de memstore atualizar.

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

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

    hbase shell
    flush "<table-name>"
    
  3. Entre no Apache Ambari no cluster de origem com https://<OLDCLUSTERNAME>.azurehdinsight.neto , e pare os serviços do HBase.

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

    Para obter mais informações sobre como se conectar e usar o Ambari, consulte Gerenciar clusters HDInsight usando a interface do usuário da Web do Ambari.

  5. Se o cluster HBase de origem não tiver o recurso Gravações Aceleradas , ignore esta etapa. Para clusters HBase de origem com Accelerated Writes, faça backup do diretório WAL em HDFS executando os seguintes comandos de uma sessão SSH em qualquer cluster de origem, nó Zookeeper ou nó de trabalho.

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

Preparar o cluster de destino

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

  2. Entre no Apache Ambari no novo cluster em https://<NEWCLUSTERNAME>.azurehdinsight.nete pare os serviços do HBase.

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

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

Limpe e migre o sistema de arquivos e a WAL

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

O <container-endpoint-url> para a 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> 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.

Copiar comandos

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

Use hadoop distcp para obter melhor desempenho ao copiar arquivos que não estejam em um blob de página: 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 o AzCopy para obter um melhor 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 Blob do Azure, execute esta etapa após a cópia. Se a conta de armazenamento de destino for Data Lake Storage Gen2, ignore esta etapa.

    O driver Hadoop WASB usa blobs especiais de tamanho 0 correspondentes a cada diretório. AzCopy ignora esses arquivos ao fazer a cópia. Algumas operações WASB usam esses blobs, portanto, você deve criá-los no cluster de destino. Para criar os blobs, execute o seguinte comando Hadoop a partir de 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 obter mais informações sobre como usar o AzCopy, consulte 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. Remover 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. Remover 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. Remover 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. Remover 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 é o 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. Remover 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 as alterações e reinicie todos os serviços necessários, conforme indicado pelo Ambari.

  2. Aponte seu aplicativo para o cluster de destino.

    Nota

    O nome DNS estático do seu aplicativo é alterado quando você atualiza. Em vez de codificar esse nome DNS, você pode configurar um CNAME nas configurações de DNS do seu nome de domínio que aponte para o nome do cluster. Outra opção é usar um arquivo de configuração para seu aplicativo que você pode atualizar sem reimplantar.

  3. Inicie a ingestão.

  4. Verifique a consistência do HBase e operações simples de DDL (Data Definition Language) e DML (Data Manipulation Language).

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

Próximos passos

Para saber mais sobre o Apache HBase e a atualização de clusters HDInsight, consulte os seguintes artigos: