HBase
 sql >> Base de Dados >  >> NoSQL >> HBase

Introdução aos instantâneos do Apache HBase


A versão atual (4.2) do CDH — a distribuição 100% de código aberto da Cloudera do Apache Hadoop e projetos relacionados (incluindo o Apache HBase) — introduziu um novo recurso HBase, recentemente lançado no tronco, que permite que um administrador tire um instantâneo de um determinado tabela.

Antes do CDH 4.2, a única maneira de fazer backup ou clonar uma tabela era usar Copiar/Exportar Tabela ou, após desabilitar a tabela, copiar todos os hfiles no HDFS. Copiar/Exportar Tabela é um conjunto de ferramentas que usa MapReduce para digitalizar e copiar a tabela, mas com impacto direto no desempenho do Servidor Regional. Desabilitar a tabela interrompe todas as leituras e gravações, o que quase sempre será inaceitável.

Por outro lado, os instantâneos do HBase permitem que um administrador clone uma tabela sem cópias de dados e com impacto mínimo nos servidores regionais. A exportação do snapshot para outro cluster não afeta diretamente nenhum dos Region Servers; export é apenas um distcp com um pouco de lógica extra.

Aqui estão alguns dos casos de uso para snapshots do HBase:
  • Recuperação de erros de usuário/aplicativo
    • Restaure/recupere de um estado seguro conhecido.
    • Visualize instantâneos anteriores e mescle seletivamente a diferença na produção.
    • Salve um instantâneo antes de uma atualização ou alteração importante do aplicativo.
  • Auditoria e/ou geração de relatórios sobre visualizações de dados em um momento específico
    • Capture dados mensais para fins de conformidade.
    • Gere relatórios de fim de dia/mês/trimestre.
  • Teste de aplicativos
    • Teste as alterações do esquema ou do aplicativo em dados semelhantes aos da produção a partir de um instantâneo e descarte-os. Por exemplo:tire um instantâneo, crie uma nova tabela a partir do conteúdo do instantâneo (esquema mais dados) e manipule a nova tabela alterando o esquema, adicionando e removendo linhas e assim por diante. (A tabela original, o instantâneo e a nova tabela permanecem mutuamente independentes.)
  • Descarregamento de trabalho
    • Tire um instantâneo, exporte-o para outro cluster e execute seus trabalhos do MapReduce. Como o snapshot de exportação opera no nível do HDFS, você não diminui a velocidade do cluster principal do HBase tanto quanto o CopyTable.

O que é um instantâneo?


Um instantâneo é um conjunto de informações de metadados que permite que um administrador volte a um estado anterior da tabela. Um instantâneo não é uma cópia da tabela; é apenas uma lista de nomes de arquivos e não copia os dados. Uma restauração de instantâneo completo significa que você volta ao “esquema de tabela” anterior e recupera seus dados anteriores, perdendo todas as alterações feitas desde que o instantâneo foi tirado.

Operações
  • Tirar um instantâneo: esta operação tenta tirar um instantâneo em uma tabela especificada. A operação pode falhar se as regiões estiverem se movendo durante o balanceamento, divisão ou mesclagem.
  • Clone um snapshot: esta operação cria uma nova tabela usando o mesmo esquema e com os mesmos dados presentes no snapshot especificado. O resultado dessa operação é uma nova tabela totalmente funcional que pode ser modificada sem impacto na tabela original ou no snapshot.
  • Restaurar um instantâneo: esta operação traz o esquema e os dados da tabela de volta ao estado do instantâneo. (Observação:esta operação descarta quaisquer alterações feitas desde que o instantâneo foi tirado.)
  • Excluir um instantâneo: esta operação remove um instantâneo do sistema, liberando espaço em disco não compartilhado, sem afetar clones ou outros instantâneos.
  • Exportar um instantâneo: esta operação copia os dados e metadados do instantâneo para outro cluster. A operação envolve apenas HDFS, portanto, não há comunicação com o mestre ou os servidores de região e, portanto, o cluster HBase pode ficar inativo.

Copiar instantâneo, restaurar, clonar


A principal diferença entre um instantâneo e um CopyTable/ExportTable é que as operações de instantâneo gravam apenas metadados. Não há cópias de dados em massa envolvidas.

Um dos principais princípios de design do HBase é que, uma vez que um arquivo seja gravado, ele nunca será modificado. Ter arquivos imutáveis ​​significa que um snapshot apenas rastreia os arquivos usados ​​no momento da operação do snapshot, e durante a compactação é responsabilidade do snapshot informar ao sistema que o arquivo não deve ser excluído, mas sim arquivado.

O mesmo princípio se aplica a uma operação de clonagem ou restauração. Como os arquivos são imutáveis, uma nova tabela é criada com apenas “links” para os arquivos referenciados pelo snapshot.

Export Snapshot é a única operação que requer uma cópia dos dados, pois o outro cluster não possui os arquivos de dados.

Exportar instantâneo x copiar/exportar tabela


Além das garantias de melhor consistência que um instantâneo pode fornecer em comparação com um trabalho de cópia/exportação, a principal diferença entre Exportar um instantâneo e Copiar/exportar uma tabela é que o ExportSnapshot opera no nível HDFS. Isso significa que os servidores mestre e de região não estão envolvidos nessas operações. Consequentemente, nenhum cache desnecessário para dados é criado e não há acionamento de pausas de GC adicionais devido ao número de objetos criados durante o processo de verificação. O impacto no desempenho do cluster HBase decorre da rede extra e da carga de trabalho do disco experimentada pelos DataNodes.

HBase Shell:operações de instantâneo


Confirme se o suporte a instantâneos está ativado verificando se o hbase.snapshot.enabled A propriedade em hbase-site.xml está configurada para true. Para tirar um instantâneo de uma tabela especificada, use o snapshot comando. (Nenhuma cópia de arquivo é executada)
hbase> snapshot ‘tableName’, ‘snapshotName’



Para listar todos os instantâneos, use o list_snapshot comando. ele exibirá o nome do instantâneo, a tabela de origem e a data e hora de criação.
hbase> list_snapshots
SNAPSHOT               TABLE + CREATION TIME
 TestSnapshot          TestTable (Mon Feb 25 21:13:49 +0000 2013)



Para remover um instantâneo, use o delete_snapshot comando. A remoção de um instantâneo não afeta as tabelas clonadas ou outros instantâneos subsequentes obtidos.
hbase> delete_snapshot 'snapshotName'



Para criar uma nova tabela a partir de um instantâneo especificado (clone), use o clone_snapshot comando. Nenhuma cópia de dados é executada, então você não acaba usando o dobro do espaço para os mesmos dados.
hbase> clone_snapshot 'snapshotName', 'newTableName'



Para substituir o esquema/dados da tabela atual por um conteúdo de instantâneo especificado, use o restore_snapshot  comando.
hbase> restore_snapshot 'snapshotName'



Para exportar um instantâneo existente para outro cluster, use o ExportSnapshot ferramenta. A exportação não afeta a carga de trabalho dos RegionServers, funciona no nível do HDFS e você precisa especificar um local do HDFS (o hbase.rootdir do outro cluster).
hbase org.apache.hadoop.hbase.snapshot.ExportSnapshot -snapshot
SnapshotName -copy-to hdfs:///srv2:8082/hbase


Limitações atuais


Os instantâneos dependem de algumas suposições e, atualmente, existem algumas ferramentas que não estão totalmente integradas ao novo recurso:
  • Mesclar regiões referenciadas por um instantâneo causa perda de dados no instantâneo e nas tabelas clonadas.
  • A restauração de uma tabela com replicação ativada para a tabela restaurada termina com os dois clusters fora de sincronia. A tabela não é restaurada na réplica.

Conclusão


Atualmente, o recurso de instantâneo inclui todas as funcionalidades básicas necessárias, mas ainda há muito trabalho a fazer, incluindo métricas, integração de UI da Web, otimizações de uso de disco e muito mais.

Para saber mais sobre como configurar o HBase e usar instantâneos, revise a documentação.

Matteo Bertozzi é engenheiro de software na equipe da plataforma e um committer do HBase.