Ao executar no EC2, muitas vezes você não pode ganhar quando se trata de tipos de instância. Um dos tipos mais econômicos disponíveis é o c1.xlarge. Ele tem CPU suficiente para lidar com compactações, uma quantidade razoável de disco e alta E/S de rede. No entanto, descobrimos que a memória relativamente baixa de 7 GB no c1.xlarge geralmente leva a problemas de estabilidade em clusters HBase altamente simultâneos. Embora existam outras opções mais caras, este tutorial do HBase ajudará você a aproveitar ao máximo seus RegionServers c1.xlarge.
1. Reduza o número de regiões por RegionServer
Idealmente, você deve ter menos de 100 regiões por RegionServer . O memstore é dividido para uso por todas as regiões ativas e cada região adiciona (por padrão) 2 MB de memória para o MSLAB. Reduzir esse número ajudará as coisas a funcionarem sem problemas, e não apenas do ponto de vista da memória.
2. Roubar memória de outros serviços
Você definitivamente não deveria estar executando um TaskTracker com seu RegionServer nesses tipos de instância, mas provavelmente está executando um DataNode local. Uma configuração típica exige 1 GB de memória para um DataNode, mas descobrimos que você não precisa disso em muitos casos. Verifique suas métricas antes de lançar isso, mas estávamos perfeitamente seguros cortando o heap do DataNode para 400 MB . Este belo pedaço de 624 MB ajudará o HBase a ir um pouco mais longe.
3. Ajustar ou desativar o MSLAB
Se depois de roubar memória e cortar regiões você ainda estiver tendo problemas, você pode dar um passo adiante. Como mencionei, o recurso MSLAB adiciona 2 MB de sobrecarga de heap por padrão para cada região. Você pode ajustar esse buffer com
hbase.hregion.memstore.mslab.chunksize
. Quanto mais baixo você for, menos eficaz será, mas também menos sobrecarga de memória. Desative-o completamente com hbase.hregion.memstore.mslab.enabled
. 4. Seja agressivo em relação ao armazenamento em cache e em lote
Cache (
Scan#setCaching(int)
) e em lote (Scan#setBatch(int)
) são ótimos para limitar o efeito da latência da rede em grandes varreduras. Infelizmente, eles também exigem mais memória no lado do cliente e do servidor. Lembre-se da troca de velocidade, mas aproveite um pouco mais de estabilidade ajustando-os , tão próximo de um valor de 1 quanto necessário. O RegionServer também precisa ter memória suficiente para lidar com todas as suas gravações simultâneas. Se você estiver agrupando suas gravações em lote ou enviando alguns valores de célula muito grandes, provavelmente encontrará OutOfMemoryExceptions. Reduza seu lote aqui também ou encontre uma maneira de diminuir o tamanho dos valores de suas células.
5. Controlar a carga do Hadoop
Se você estiver executando tarefas do hadoop em seus dados do HBase, estará basicamente executando muitas varreduras grandes. Em um trabalho HBase MapReduce, cada região se torna um mapeador. Se você tiver mais de 1 região por RegionServer, é provável que você tenha alguns mapeadores varrendo o mesmo RegionServer simultaneamente em algum ponto. Cada uma dessas verificações está consumindo recursos de memória, disco e CPU e, quando vários acumulam, podem causar alguma dor.
Reduzindo
hbase.regionserver.handler.count
ajudará a limitar o número de conexões ativas que ocupam memória, mas você ainda poderá ter um problema se todos os manipuladores estiverem lidando com grandes varreduras de região completa. Usando nossa extensão de TableInputFormat, você pode controlar facilmente quantos mapeadores simultâneos são executados em um único RegionServer , fornecendo uso de memória mais previsível. Se você estiver gravando no HBase a partir de um redutor, também precisará controlar o particionamento lá. Isso é facilmente implementado usando o
Partitioner
do Hadoop interface, com HBaseAdmin
do HBase interface fornecendo a região para mapeamentos RegionServer. Executar o HBase com pouca memória é difícil, mas não impossível
Com essas dicas em mãos, você deve estar no caminho certo para sobreviver às operações em seu ambiente com pouca memória. Pode ser frustrante lutar por cada megabyte de memória em uma era de RAM extremamente barata e rápida. Mas siga estas dicas e seu CFO agradecerá por aproveitar ao máximo esse tipo de instância econômica. Para aqueles com um pouco mais de liberdade financeira, exploraremos o impacto dos novos tipos de instância I2 da Amazon em uma postagem futura . Então fique ligado!
Este artigo foi publicado originalmente em dev.hubspot.com