HBase no Amazon S3 (modo de armazenamento do Amazon S3) - Amazon EMR

As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.

HBase no Amazon S3 (modo de armazenamento do Amazon S3)

Ao executar o HBase no Amazon EMR 5.2.0 ou versões posteriores, você pode habilitar o HBase no Amazon S3, que oferece as seguintes vantagens:

  • O diretório raiz HBase é armazenado no Amazon S3, incluindo arquivos de armazenamento e metadados de tabela do HBase. Esses dados são persistentes fora do cluster, disponíveis em zonas de disponibilidade do Amazon EC2, e você não precisa recuperar usando snapshots ou outros métodos.

  • Com arquivos de armazenamento no Amazon S3, você pode dimensionar seu cluster do Amazon EMR para suas necessidades de computação em vez de requisitos de dados, com replicação de 3x no HDFS.

  • Usando o Amazon EMR versão 5.7.0 ou posterior, você pode configurar um cluster de réplica de leitura, que permite manter cópias somente leitura dos dados no Amazon S3. Você pode acessar os dados do cluster de réplica de leitura para realizar operações de leitura simultaneamente e no evento de o cluster primário se tornar indisponível.

  • No Amazon EMR 6.2.0 e versões posteriores, o rastreamento persistente do HFile usa uma tabela do sistema HBase chamada hbase:storefile para rastrear diretamente os caminhos do HFile usados para operações de leitura. Esse atributo é habilitado por padrão e não exige que a migração manual seja executada.

A ilustração a seguir mostra os componentes HBase relevantes para o HBase no Amazon S3.

Arquitetura do HBase no Amazon S3.

Habilitar o HBase no Amazon S3

Você pode habilitar o HBase no Amazon S3 usando o console do Amazon EMR AWS CLI, o ou a API do Amazon EMR. A configuração é uma opção durante a criação do cluster. Ao usar o console, você escolhe a configuração usando Advanced options (Opções avançadas). Quando você usa a AWS CLI, use a opção --configurations para fornecer um objeto de configuração JSON. As propriedades do objeto de configuração especificam o modo de armazenamento e o local do diretório raiz no Amazon S3. O local do Amazon S3 que você especificar deve estar na mesma região que seu cluster do Amazon EMR. Apenas um cluster ativo de cada vez pode usar o mesmo diretório de raiz do HBase no Amazon S3. Para ver as etapas do console e um exemplo detalhado de criação de cluster usando o AWS CLI, consulte. Criar um cluster com o HBase Um objeto de configuração de exemplo é mostrado no seguinte trecho de código JSON.

{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "s3://my-bucket/my-hbase-rootdir"} }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode":"s3" } }
nota

Ao usar um bucket do Amazon S3 como rootdir para o HBase, é necessário adicionar uma barra no final do URI do Amazon S3. Por exemplo, é necessário usar "hbase.rootdir: s3://my-bucket/", em vez de "hbase.rootdir: s3://my-bucket", para evitar problemas.

Usar um cluster de réplica de leitura

Depois de configurar um cluster primário usando o HBase no Amazon S3, você pode criar e configurar um cluster de réplica de leitura que fornece acesso somente leitura aos mesmos dados que o cluster primário. Isso é útil quando você precisa de acesso simultâneo para consultar dados ou de acesso ininterrupto caso o cluster primário se torne indisponível. O atributo de réplica de leitura está disponível no Amazon EMR 5.7.0 e versões posteriores.

O cluster primário e o cluster de réplica de leitura são configuradas da mesma maneira, com uma diferença importante. Ambos apontam para o mesmo local hbase.rootdir. No entanto, a classificação hbase para o cluster de réplica de leitura inclui a propriedade "hbase.emr.readreplica.enabled":"true".

Por exemplo, considerando a configuração JSON para o cluster primário, conforme mostrado anteriormente no tópico, a configuração para um cluster de réplica de leitura é a seguinte:

{ "Classification": "hbase-site", "Properties": { "hbase.rootdir": "s3://my-bucket/my-hbase-rootdir"} }, { "Classification": "hbase", "Properties": { "hbase.emr.storageMode":"s3", "hbase.emr.readreplica.enabled":"true" } }

Sincronizar a réplica de leitura ao adicionar dados

Como a réplica de leitura usa o HBase StoreFiles e os metadados que o cluster primário grava no Amazon S3, a réplica de leitura é tão atual quanto o armazenamento de dados do Amazon S3. A orientação a seguir pode ajudar a minimizar o tempo de retardo entre o cluster primário e a réplica de leitura quando você grava dados.

  • Carregue os dados em massa no cluster primário sempre que possível. Para obter mais informações, consulte Bulk loading na documentação do Apache HBase.

  • Uma liberação que grava arquivos de armazenamento no Amazon S3 deve ocorrer logo que possível após a adição dos dados. Faça a liberação manualmente ou ajuste configurações de liberação para minimizar o tempo de retardo.

  • Se compactações puderem ser executadas automaticamente, execute uma compactação manual para evitar inconsistências quando compactações forem acionadas.

  • No cluster de réplica de leitura, quando metadados forem alterados (por exemplo, quando ocorrem compactações ou uma divisão de regiões do HBase, ou quando as tabelas são adicionadas ou removidas) execute o comando refresh_meta.

  • No cluster de réplica de leitura, execute o comando refresh_hfiles quando registros forem adicionados ou alterados em uma tabela.

Sincronizando dados com uma réplica de leitura do HBase

Rastreamento persistente do HFile

O rastreamento persistente do HFile usa uma tabela do sistema HBase chamada hbase:storefile para rastrear diretamente os caminhos do HFile usados para operações de leitura. Adicionam-se novos caminhos do HFile à tabela à medida que outros dados são adicionados ao HBase. Isso elimina operações de renomeação como um mecanismo de confirmação nas operações essenciais do HBase do caminho de gravação e reduz o tempo de recuperação ao abrir uma região do HBase lendo a tabela do sistema hbase:storefile em vez da listagem de diretórios do sistema de arquivos. Esse atributo é habilitado por padrão no Amazon EMR 6.2.0 e versões posteriores e não requer etapas de migração manual.

nota

O rastreamento persistente do HFile que usa a tabela do sistema storefile do HBase não é compatível com o recurso de replicação da região do HBase. Para obter mais informações sobre a replicação da região do HBase, consulte Timeline-consistent high available reads.

Desabilitar o rastreamento persistente do HFile

O rastreamento persistente de arquivos é ativado por padrão a partir da versão 6.2.0 do Amazon EMR. Para desabilitar o rastreamento persistente do HFile, especifique a seguinte substituição de configuração ao iniciar um cluster:

{ "Classification": "hbase-site", "Properties": { "hbase.storefile.tracking.persist.enabled":"false", "hbase.hstore.engine.class":"org.apache.hadoop.hbase.regionserver.DefaultStoreEngine" } }
nota

Ao reconfigurar o cluster do Amazon EMR, todos os grupos de instâncias deverão ser atualizados.

Sincronizar a tabela Storefile manualmente

A tabela storefile é mantida atualizada à medida que novos HFiles são criados. No entanto, se a tabela storefile ficar fora de sincronia com os arquivos de dados por qualquer motivo, estes comandos poderão ser usados para sincronizar os dados manualmente:

Sincronizar a tabela storefile em uma região on-line:

hbase org.apache.hadoop.hbase.client.example.RefreshHFilesClient <table>

Sincronizar a tabela do storefile em uma região off-line:

  • Remova o znode da tabela storefile.

    echo "ls /hbase/storefile/loaded" | sudo -u hbase hbase zkcli [<tableName>, hbase:namespace] # The TableName exists in the list echo "delete /hbase/storefile/loaded/<tableName>" | sudo -u hbase hbase zkcli # Delete the Table ZNode echo "ls /hbase/storefile/loaded" | sudo -u hbase hbase zkcli [hbase:namespace]
  • Atribua a região (execute em “hbase shell”).

    hbase cli> assign '<region name>'
  • Se a tarefa falhar.

    hbase cli> disable '<table name>' hbase cli> enable '<table name>'

Escalar a tabela storefile

Por padrão, a tabela storefile é dividida em quatro regiões. Se a tabela storefile continuar sob carga de gravação pesada, a tabela ainda poderá ser dividida manualmente.

Para dividir uma região ativa específica, use o comando a seguir (executado em “hbase shell”).

hbase cli> split '<region name>'

Para dividir a tabela, use o comando a seguir (execute em “hbase shell”).

hbase cli> split 'hbase:storefile'

Considerações operacionais

Os servidores da região HBase são usados BlockCache para armazenar leituras de dados na memória e BucketCache armazenar leituras de dados no disco local. Além disso, os servidores regionais usam MemStore para armazenar gravações de dados na memória e usam registros de gravação antecipada para armazenar gravações de dados no HDFS antes que os dados sejam gravados no HBase no StoreFiles Amazon S3. O desempenho de leitura do seu cluster estão relacionado à frequência com a qual um registro pode ser recuperado dos caches na memória ou no disco. Uma perda de cache faz com que o registro seja lido StoreFile no Amazon S3, que tem latência significativamente maior e maior desvio padrão do que a leitura do HDFS. Além disso, as taxas máximas de solicitações para o Amazon S3 são menores do que as que podem ser obtidas no cache local e, portanto, o armazenamento de dados no cache pode ser importante para workload com uso intensivo de leitura. Para obter mais informações sobre a performance do Amazon S3, consulte Performance optimization, no Guia do usuário do Amazon Simple Storage Service.

Para melhorar o desempenho, recomendamos que você armazene em cache o máximo possível do seu conjunto de dados no armazenamento de instâncias do EC2. Como BucketCache usa o armazenamento de instância EC2 do servidor regional, você pode escolher um tipo de instância EC2 com um armazenamento de instâncias suficiente e adicionar armazenamento Amazon EBS para acomodar o tamanho de cache necessário. Você também pode aumentar o BucketCache tamanho dos armazenamentos de instâncias anexados e dos volumes do EBS usando a hbase.bucketcache.size propriedade. A configuração padrão é 8.192 MB.

Para gravações, a frequência de MemStore descargas e o número de StoreFiles presentes durante compactações menores e maiores podem contribuir significativamente para um aumento nos tempos de resposta do servidor regional. Para um desempenho ideal, considere aumentar o tamanho do multiplicador de blocos MemStore flush e hRegion, o que aumenta o tempo decorrido entre as principais compactações, mas também aumenta o atraso na consistência se você usar uma réplica de leitura. Em alguns casos, você pode obter melhor performance usando tamanhos de blocos de arquivos maiores (porém inferiores a 5 GB) para acionar a funcionalidade do carregamento multiparte do Amazon S3 no EMRFS. O tamanho padrão do bloco do Amazon EMR é 128 MB. Para ter mais informações, consulte Configuração do HDFS. Raramente há clientes que excedem 1 GB de tamanho de bloco ao fazer a comparação do desempenho com liberações e compactações. Além disso, as compactações do HBase e os servidores regionais funcionam de maneira ideal quando menos StoreFiles precisam ser compactados.

Tabelas podem demorar um tempo significativo para serem descartadas no Amazon S3, pois diretórios grandes precisam ser renomeados. Considere desabilitar tabelas em vez de as descartar.

Há um processo de agente de limpeza do HBase que limpa os arquivos WAL antigos e arquivos de armazenamento. Com o Amazon EMR versão 5.17.0 e posterior, o agente de limpeza está habilitado globalmente, e as seguintes propriedades de configuração podem ser usadas para controlar o comportamento do agente de limpeza.

Propriedade de configuração Valor padrão Descrição

hbase.regionserver.hfilecleaner.large.thread.count

1

O número de threads alocados para limpar HFiles grandes expirados.

hbase.regionserver.hfilecleaner.small.thread.count

1

O número de threads alocados para limpar HFiles pequenos expirados.

hbase.cleaner.scan.dir.concurrent.size

Defina como um quarto de todos os núcleos disponíveis.

O número de threads para verificar diretórios oldWALs.

hbase.oldwals.cleaner.thread.size

2

O número de threads para limpar os WALs no diretório oldWals.

Com o Amazon EMR 5.17.0 e versões anteriores, a operação do agente de limpeza pode afetar a performance de consultas ao executar workloads pesadas. Por isso, recomendamos que você ative o agente de limpeza apenas fora de horários de pico. O agente de limpeza têm os seguintes comandos shell do HBase:

  • cleaner_chore_enabled consulta se o agente de limpeza está habilitado.

  • cleaner_chore_run executa manualmente o agente de limpeza para remover arquivos.

  • cleaner_chore_switch habilita ou desabilita o agente de limpeza e retorna ao seu estado anterior. Por exemplo, cleaner_chore_switch true habilita o agente de limpeza.

Propriedades para o ajuste do performance do HBase no Amazon S3

Os seguintes parâmetros podem ser adaptados para ajustar a performance da workload quando você usa o HBase no Amazon S3.

Propriedade de configuração Valor padrão Descrição

hbase.bucketcache.size

8,192

A quantidade de espaço em disco, em MB, reservada nos armazenamentos de instâncias Amazon EC2 do servidor regional e nos volumes do EBS para armazenamento. BucketCache A configuração se aplica a todas as instâncias do servidor de regiões. BucketCache Tamanhos maiores geralmente correspondem a um desempenho aprimorado

hbase.hregion.memstore.flush.size

134217728

O limite de dados, em bytes, no qual uma liberação de memstore para o Amazon S3 é acionada.

hbase.hregion.memstore.block.multiplier

4

Um multiplicador que determina o limite MemStore superior no qual as atualizações são bloqueadas. Se os MemStore excedentes forem hbase.hregion.memstore.flush.size multiplicados por esse valor, as atualizações serão bloqueadas. MemStore descargas e compactação podem ocorrer para desbloquear as atualizações.

hbase.hstore.blockingStoreFiles

10

O número máximo StoreFiles que pode existir em uma loja antes que as atualizações sejam bloqueadas.

hbase.hregion.max.filesize

10737418240

O tamanho máximo de uma região antes que ela seja dividida.

Desativar e restaurar um cluster sem perda de dados

Para desligar um cluster do Amazon EMR sem perder dados que não foram gravados no Amazon S3, você deve liberar seu cache no Amazon S3 MemStore para gravar novos arquivos de armazenamento. Primeiro, é necessário desabilitar todas as tabelas. A seguinte configuração de etapas pode ser usada quando você adiciona uma etapa ao cluster. Para obter mais informações, consulte Work with steps using the AWS CLI and console no Guia de gerenciamento do Amazon EMR.

Name="Disable all tables",Jar="command-runner.jar",Args=["/bin/bash","/usr/lib/hbase/bin/disable_all_tables.sh"]

Como alternativa, você pode executar o seguinte comando bash diretamente.

bash /usr/lib/hbase/bin/disable_all_tables.sh

Após desabilitar todas as tabelas, libere a tabela hbase:meta usando o shell do HBase e o comando a seguir.

flush 'hbase:meta'

Em seguida, você pode executar um script de shell fornecido no cluster do Amazon EMR para limpar o cache. MemStore Você pode adicioná-lo como uma etapa ou executá-lo diretamente, usando a AWS CLI no cluster. O script desativa todas as tabelas do HBase, o que faz com que o servidor de cada MemStore região seja transferido para o Amazon S3. Se o script for concluído com êxito, os dados persistirão no Amazon S3, e o cluster poderá ser terminado.

Para reiniciar um cluster com os mesmos dados do HBase, especifique a mesma localização do Amazon S3 do cluster anterior na propriedade de configuração ou usando AWS Management Console hbase.rootdir a propriedade de configuração.