Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Este artigo descreve vários avisos para ajudá-lo a otimizar o desempenho do Apache HBase no Azure HDInsight.
Otimizar o HBase para ler os dados gravados mais recentemente
Se o seu caso de uso envolve a leitura dos dados escritos mais recentemente do HBase, este aviso pode ajudá-lo. Para alto desempenho, é ideal que as leituras do HBase sejam servidas a partir de memstore, em vez do armazenamento remoto.
O aviso de consulta indica que, para uma determinada família de colunas numa tabela, > 75% das leituras são atendidas de memstore. Este indicador sugere que, mesmo que aconteça uma descarga no memstore, o arquivo recente precisa ser acessado e isso precisa estar em cache. Os dados são primeiro gravados em memstore, e o sistema depois acede os dados recentes lá. Há uma chance de que os threads internos do flusher HBase detetem que uma determinada região atingiu o tamanho de 128M (padrão) e possam acionar um flush. Este cenário acontece até mesmo com os dados mais recentes que foram escritos quando o memstore tinha cerca de 128 milhões de tamanho. Portanto, uma leitura posterior destes registos recentes pode exigir uma leitura de arquivo em vez de a partir de memstore. Portanto, é melhor otimizar para que até mesmo os dados recentes que foram liberados recentemente possam residir no cache.
Para otimizar os dados recentes em cache, considere as seguintes definições de configuração:
Defina
hbase.rs.cacheblocksonwritecomotrue. Essa configuração padrão no HDInsight HBase étrue, portanto, verifique se ela não foi redefinida parafalse.Aumente o
hbase.hstore.compactionThresholdvalor para evitar que a compactação ocorra. Por predefinição, este valor é3. Você pode aumentá-lo para um valor mais alto como10.Se você seguir a etapa 2 e definir compactionThreshold, mude
hbase.hstore.compaction.maxpara um valor mais alto, por exemplo100, e também aumente o valor da configuraçãohbase.hstore.blockingStoreFilespara um valor mais alto, por exemplo300.Se tiver certeza de que precisa ler apenas os dados recentes, defina
hbase.rs.cachecompactedblocksonwritea configuração como ON. Essa configuração informa ao sistema que, mesmo que a compactação aconteça, os dados permanecem em cache. As configurações também podem ser definidas a nível familiar.No Shell do HBase, execute o seguinte comando para definir a configuração
hbase.rs.cachecompactedblocksonwrite.alter '<TableName>', {NAME => '<FamilyName>', CONFIGURATION => {'hbase.hstore.blockingStoreFiles' => '300'}}O cache de blocos pode ser desativado para uma família específica em uma tabela. Certifique-se de que está ativado ON para as famílias que têm as leituras de dados mais recentes. Por padrão, o cache de blocos é ativado para todas as famílias em uma tabela. Caso tenha desativado o cache de bloco para uma família e precise ativá-lo, utilize o comando alter do shell hbase.
Essas configurações ajudam a garantir que os dados estejam disponíveis em cache e que os dados recentes não sofram compactação. Se um TTL for possível em seu cenário, considere o uso da compactação em camadas de data. Para obter mais informações, consulte Apache HBase Reference Guide: Date Tiered Compaction
Otimize a fila de descarga
Este aviso indica que as descargas de HBase podem necessitar de ajustes. A configuração atual para os controladores de descarga pode não ser suficiente para gerir o tráfego de escrita, o que pode levar a uma lentidão nas operações de descarga.
Na interface do utilizador do servidor de região, observe se a fila de esvaziamento ultrapassa 100. Esse limite indica que as descargas estão lentas e você pode ter que ajustar a hbase.hstore.flusher.count configuração. Por padrão, o valor é 2. Certifique-se de que o número máximo de threads do flusher não aumente além de 6.
Além disso, veja se tem uma recomendação para otimização da contagem de regiões. Se sim, sugerimos que experimente o ajuste da região para ver se isso ajuda em descargas de dados mais rápidas. Caso contrário, ajustar os fios do flusher pode ajudá-lo.
Ajuste da contagem de regiões
O aviso de ajuste de contagem de regiões indica que o HBase bloqueou atualizações e a contagem de regiões pode ser maior do que o tamanho de heap suportado idealmente. Você pode ajustar o tamanho da pilha, o tamanho de memstore, e a contagem de regiões.
Como cenário de exemplo:
Suponha que o tamanho da pilha para o servidor de região é de 10 GB. Por padrão, o
hbase.hregion.memstore.flush.sizeé128M. O valor padrão parahbase.regionserver.global.memstore.sizeé0.4. O que significa que, dos 10 GB, 4 GB são alocados paramemstore(globalmente).Suponha que haja uma distribuição uniforme da carga de gravação em todas as regiões, e supondo que cada região cresça apenas até 128 MB, então, o número máximo de regiões nesta configuração é
32regiões. Se um determinado servidor de região estiver configurado para ter 32 regiões, o sistema evitará melhor o bloqueio de atualizações.Com essas configurações em vigor, o número de regiões é 100. O global
memstorede 4 GB está agora dividido em 100 regiões. Assim, efetivamente, cada região recebe apenas 40 MB paramemstore. Quando as gravações são uniformes, o sistema faz flushes frequentes e tamanho menor da ordem < de 40 MB. Ter muitos fios de descarga pode aumentar a velocidadehbase.hstore.flusher.countde descarga.
O aviso significa que seria bom reconsiderar o número de regiões por servidor, o tamanho da pilha e a configuração de tamanho global memstore, juntamente com o ajuste dos threads de esvaziamento para evitar que as atualizações sejam bloqueadas.
Ajuste da fila de compactação
Se a fila de compactação do HBase crescer para mais de 2000 e acontecer periodicamente, você poderá aumentar os threads de compactação para um valor maior.
Quando há um número excessivo de ficheiros para compactação, tal situação pode levar a uma maior utilização da heap associada à maneira como os ficheiros interagem com o sistema de ficheiros do Azure. Por isso, é melhor concluir a compactação o mais rápido possível. Às vezes, em clusters mais antigos, as configurações de compactação relacionadas ao controlo podem resultar numa taxa de compactação mais lenta.
Verifique as configurações hbase.hstore.compaction.throughput.lower.bound e hbase.hstore.compaction.throughput.higher.bound. Se já estiverem definidos para 50M e 100M, mantenha-os como estão. No entanto, se você definiu essas configurações para um valor mais baixo (o que era o caso com clusters mais antigos), altere os limites para 50M e 100M, respectivamente.
As configurações são hbase.regionserver.thread.compaction.small e hbase.regionserver.thread.compaction.large (os padrões são 1 cada).
Limite o valor máximo para esta configuração para ser inferior a 3.
Verificação completa da tabela
O aviso de verificação de tabela completa indica que mais de 75% das verificações emitidas são verificações de tabela/região completas. Você pode revisitar a maneira como seu código chama as verificações para melhorar o desempenho da consulta. Considere as seguintes práticas:
Defina corretamente a linha de início e fim para cada varredura.
Use a API de MultiRowRangeFilter para poder consultar intervalos diferentes numa única chamada. Para obter mais informações, consulte a documentação da API MultiRowRangeFilter.
Nos casos em que você precisa de uma verificação completa de tabela ou região, verifique se há a possibilidade de evitar o uso de cache para essas consultas, para que outras consultas que usam o cache não possam remover os blocos que estão quentes. Para garantir que as verificações não usem cache, use a API de verificação com a opção setCaching(false) em seu código:
scan#setCaching(false)