Falha ao iniciar o Apache HBase Master (HMaster) no Azure HDInsight

Este artigo descreve os passos de resolução de problemas e possíveis resoluções de problemas ao interagir com clusters do Azure HDInsight.

Cenário: Master startup cannot progress, in holding-pattern until region comes online

Problema

O HMaster não inicia devido ao seguinte aviso:

hbase:namespace,,<timestamp_region_create>.<encoded_region_name>.is NOT online; state={<encoded_region_name> state=OPEN, ts=<some_timestamp>, server=<server_name>}; ServerCrashProcedures=true. Master startup cannot progress, in holding-pattern until region onlined. 

Por exemplo, os valores dos parâmetros podem variar na mensagem real:

hbase:namespace,,1546588612000.0000010bc582e331e3080d5913a97000. is NOT online; state={0000010bc582e331e3080d5913a97000 state=OPEN, ts=1633935993000, server=<wn fqdn>,16000,1622012792000}; ServerCrashProcedures=false. Master startup cannot progress, in holding-pattern until region onlined.

Causa

O HMaster verifica o diretório WAL nos servidores de região antes de colocar as regiões OPEN online. Neste caso, se o diretório não estava presente, não estava a começar

Resolução

  1. Crie este diretório fictício com o comando : sudo -u hbase hdfs dfs -mkdir /hbase-wals/WALs/<wn fqdn>,16000,1622012792000

  2. Reinicie o serviço HMaster a partir da IU do Ambari.

Se estiver a utilizar hbase-2.x, veja mais informações sobre como utilizar hbck2 para atribuir espaço de nomes e meta tabela

Cenário: Falha ao mudar o nome atómico

Problema

Ficheiros inesperados identificados durante o processo de arranque.

Causa

Durante o processo de arranque, o HMaster executa muitos passos de inicialização, incluindo mover dados do zero (.tmp) para a pasta de dados. O HMaster também analisa a pasta de registos de escrita antecipada (WAL) para ver se existem servidores de região sem resposta.

O HMaster faz um comando de lista básico nas pastas WAL. Se, a qualquer momento, o HMaster vir um ficheiro inesperado em qualquer uma destas pastas, gera uma exceção e não inicia.

Resolução

Verifique a pilha de chamadas e tente determinar qual a pasta que pode estar a causar o problema (por exemplo, pode ser a pasta WAL ou a pasta .tmp). Em seguida, no Explorador de Armazenamento do Azure ou com comandos HDFS, tente localizar o ficheiro de problema. Normalmente, este ficheiro é denominado *-renamePending.json. (O *-renamePending.json ficheiro é um ficheiro de diário que é utilizado para implementar a operação de mudança de nome atómica no controlador WASB. Devido a erros nesta implementação, estes ficheiros podem ser deixados de lado após a falha do processo, etc.) Force a eliminação deste ficheiro no Cloud Explorer ou através de comandos HDFS.

Por vezes, também pode haver um ficheiro temporário com o nome algo como $$$.$$$ nesta localização. Tem de utilizar o comando HDFS ls para ver este ficheiro; não pode ver o ficheiro no Explorador de Armazenamento do Azure. Para eliminar este ficheiro, utilize o comando hdfs dfs -rm /\<path>\/\$\$\$.\$\$\$HDFS .

Depois de executar estes comandos, o HMaster deve ser iniciado imediatamente.


Cenário: Nenhum endereço de servidor listado

Problema

Poderá ver uma mensagem que indica que a hbase: meta tabela não está online. A execução hbck poderá indicar que hbase: meta table replicaId 0 is not found on any region. Nos registos do HMaster, poderá ver a mensagem: No server address listed in hbase: meta for region hbase: backup <region name>.

Causa

O HMaster não conseguiu inicializar depois de reiniciar o HBase.

Resolução

  1. Na shell do HBase, introduza os seguintes comandos (altere os valores reais conforme aplicável):

    scan 'hbase:meta'
    delete 'hbase:meta','hbase:backup <region name>','<column name>'
    
  2. Elimine a hbase: namespace entrada. Esta entrada pode ser o mesmo erro que está a ser comunicado quando a hbase: namespace tabela é analisada.

  3. Reinicie o HMaster ativo a partir da IU do Ambari para apresentar o HBase no estado de execução.

  4. Na shell do HBase, para apresentar todas as tabelas offline, execute o seguinte comando:

    hbase hbck -ignorePreCheckPermission -fixAssignments
    

Cenário: java.io.IOException: Timedout

Problema

O HMaster excede o limite de tempo com uma exceção fatal semelhante a: java.io.IOException: Timedout 300000ms waiting for namespace table to be assigned.

Causa

Poderá deparar-se com este problema se tiver muitas tabelas e regiões que não foram removidas da cache quando reiniciar os seus serviços HMaster. O tempo limite é um defeito conhecido com o HMaster. As tarefas gerais de arranque do cluster podem demorar muito tempo. O HMaster será encerrado se a tabela de espaço de nomes ainda não estiver atribuída. As longas tarefas de arranque ocorrem quando existe uma grande quantidade de dados não imputados e um tempo limite de cinco minutos não é suficiente.

Resolução

  1. Na IU do Apache Ambari, aceda aConfigurações do HBase>. No ficheiro personalizado hbase-site.xml , adicione a seguinte definição:

    Key: hbase.master.namespace.init.timeout Value: 2400000  
    
  2. Reinicie os serviços necessários (HMaster e, possivelmente, outros serviços HBase).


Cenário: Reinícios frequentes do servidor de região

Problema

Os nós são reiniciados periodicamente. Nos registos do servidor de região, poderá ver entradas semelhantes a:

2017-05-09 17:45:07,683 WARN  [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 31000ms
2017-05-09 17:45:07,683 WARN  [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 31000ms
2017-05-09 17:45:07,683 WARN  [JvmPauseMonitor] util.JvmPauseMonitor: Detected pause in JVM or host machine (eg GC): pause of approximately 31000ms

Causa: tempo limite da sessão do zookeeper

Pausa longa regionserver do JVM GC. A pausa faz com que regionserver não responda e não consiga enviar batimentos cardíacos para o HMaster dentro do tempo limite da sessão do zookeeper 40s. O HMaster acredita regionserver que está morto, aborta o regionserver e reinicia.

Para mitigar, altere o tempo limite da sessão do Zookeeper, não só hbase-site a definiçãozookeeper.session.timeout, mas também a definição maxSessionTimeout zookeeperzoo.cfg.

  1. Aceda à IU do Ambari, aceda a HBase –> Configurações –> Definições, na secção Tempos limite, altere o valor de Tempo Limite da Sessão do Zookeeper.

  2. Aceda à IU do Ambari, aceda a Zookeeper –> Configurações –> Personalizadazoo.cfg, adicione/altere a seguinte definição. Certifique-se de que o valor é o mesmo que HBase zookeeper.session.timeout.

    Key: maxSessionTimeout Value: 120000  
    
  3. Reinicie os serviços necessários.

Causa: RegionServer sobrecarregado

Siga Número de regiões por RS – limite superior para calcular o limite superior. Por exemplo: 8000 (Region server Heap -- Xmx in MB) * 0.4 (hbase.regionserver.global.memstore.size) /64 (hbase.regionserver.hlog.blocksize/2) = 50

Para mitigar, aumente verticalmente o cluster do HBase.


Cenário: Falha na divisão de registos

Problema

O HMasters não conseguiu aparecer num cluster do HBase.

Causa

Definições de HDFS e HBase configuradas incorretamente para uma conta de armazenamento secundária.

Resolução

set hbase.rootdir: wasb://@.blob.core.windows.net/hbase e reinicie os serviços no Ambari.


Passos seguintes

Se não vir o problema ou não conseguir resolver o problema, visite um dos seguintes canais para obter mais suporte:

  • Obtenha respostas de especialistas do Azure através do Suporte da Comunidade do Azure.

  • Ligue-se ao @AzureSupport – a conta oficial do Microsoft Azure para melhorar a experiência do cliente. Ligar a comunidade do Azure aos recursos certos: respostas, suporte e especialistas.

  • Se precisar de mais ajuda, pode submeter um pedido de suporte do portal do Azure. Selecione Suporte na barra de menus ou abra o hub Ajuda + suporte . Para obter informações mais detalhadas, veja Como criar um pedido de suporte do Azure. O acesso à Gestão de Subscrições e ao suporte de faturação está incluído na sua subscrição do Microsoft Azure e o Suporte Técnico é fornecido através de um dos Planos de Suporte do Azure.