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

O que são compactações HBase?


O modelo de compactação está mudando drasticamente com o CDH 5/HBase 0.96. Veja o que você precisa saber.

O Apache HBase é um armazenamento de dados distribuído baseado em uma árvore de mesclagem estruturada em log, portanto, o desempenho ideal de leitura viria de ter apenas um arquivo por armazenamento (Família de colunas). No entanto, esse ideal não é possível durante períodos de gravações de entrada pesadas. Em vez disso, o HBase tentará combinar HFiles para reduzir o número máximo de buscas de disco necessárias para uma leitura. Este processo é chamado de compactação .

As compactações escolhem alguns arquivos de um único armazenamento em uma região e os combinam. Esse processo envolve a leitura de KeyValues ​​nos arquivos de entrada e a gravação de quaisquer KeyValues ​​que não são excluídos, estão dentro do tempo de vida (TTL) e não violam o número de versões. O arquivo combinado recém-criado substitui os arquivos de entrada na região.

Agora, sempre que um cliente solicita dados, o HBase sabe que os dados dos arquivos de entrada são mantidos em um arquivo contíguo no disco - portanto, apenas uma busca é necessária, enquanto anteriormente uma para cada arquivo poderia ser necessária. Mas a E/S de disco não é gratuita e, sem atenção cuidadosa, reescrever dados repetidamente pode levar a uma séria sobrecarga de rede e disco. Em outras palavras, a compactação significa trocar algumas E/S de disco agora por menos buscas depois.

Neste post, você aprenderá mais sobre o uso e as implicações das compactações no CDH 4, bem como as mudanças no modelo de compactação no CDH 5 (que será re-baseado no HBase 0.96).

Compactação em CDH 4


A compactação ideal escolheria os arquivos que reduziriam mais buscas nas próximas leituras, ao mesmo tempo em que escolheria os arquivos que precisariam da menor quantidade de E/S. Infelizmente, esse problema não pode ser resolvido sem o conhecimento do futuro. Como tal, é apenas um ideal pelo qual o HBase deve se esforçar e não algo que é realmente alcançável.

Em vez do ideal impossível, o HBase usa uma heurística para tentar escolher quais arquivos em uma loja provavelmente serão bons candidatos. Os arquivos são escolhidos na intuição de que arquivos semelhantes devem ser combinados com arquivos semelhantes – ou seja, arquivos com aproximadamente o mesmo tamanho devem ser combinados.

A política padrão no HBase 0.94 (envio no CDH 4) examina a lista de HFiles, tentando encontrar o primeiro arquivo que tenha um tamanho menor que o total de todos os arquivos multiplicado por hbase.store.compaction.ratio. Uma vez que esse arquivo é encontrado, o HFile e todos os arquivos com ids de sequência menores são escolhidos para serem compactados.

Para o caso padrão dos arquivos maiores serem os mais antigos, essa abordagem funciona bem:



No entanto, essa suposição sobre a correlação entre idade e tamanho dos arquivos é falha em alguns casos, levando o algoritmo atual a escolher abaixo do ideal. Em vez disso, os arquivos carregados em massa podem e às vezes são classificados de maneira muito diferente dos HFiles normalmente liberados, então eles são ótimos exemplos:


Mudanças de compactação no CDH 5


As compactações mudaram de forma significativa recentemente. Para HBase 0.96 e CDH 5, o algoritmo de seleção de arquivos foi feito configurável via HBASE-7516 - então agora é possível ter políticas de compactação fornecidas pelo usuário. Essa alteração permite que usuários mais experientes testem e repitam como desejam executar as compactações.

O algoritmo de seleção de compactação padrão também foi alterado para ExploringCompactionPolicy. Essa política é diferente do antigo padrão, pois garante que cada arquivo em uma compactação proposta esteja dentro da proporção especificada. Além disso, ele não escolhe apenas o primeiro conjunto de arquivos que possui tamanhos dentro da taxa de compactação; em vez disso, ele analisa todos os conjuntos possíveis que não violam nenhuma regra e, em seguida, escolhe algo que parece ser mais impactante para a menor quantidade de IO esperada. Para isso, a ExploringCompactionPolicy escolhe uma compactação que removerá o maior número de arquivos dentro da proporção, e se houver empate, a preferência é dada ao conjunto de arquivos de tamanho menor:



Mais mudanças estão planejadas para versões futuras, incluindo compactação em camadas, compactação em faixas e compactação baseada em nível.

Conclusão


Para alguns casos de uso, esse trabalho não terá nenhum impacto. Isso é bom, pois as compactações já eram muito bem estudadas. No entanto, para usuários que têm grandes picos de tráfego ou que usam cargas em massa, esse trabalho pode gerar grandes melhorias nos tempos de espera de E/S e na latência de solicitação. Para um caso de uso de carregamento em massa específico, observamos uma redução de 90% na E/S de disco devido a compactações.

Aqui estão os resultados de um caso de teste no PerfTestCompactionPolicies do HBase:



Confira este trabalho no CDH 5 (em beta no momento da redação deste artigo) quando se trata de um cluster perto de você.

Leituras adicionais:

  • Explorando a política de compactação
  • https://hbase.apache.org/book/regions.arch.html#compaction.file.selection
  • https://issues.apache.org/jira/browse/HBASE-7516
  • https://issues.apache.org/jira/browse/HBASE-7678
  • https://issues.apache.org/jira/browse/HBASE-7667
  • https://issues.apache.org/jira/browse/HBASE-7055
  • http://www.hbasecon.com/sessions/compaction-improvements-in-apache-hbase/