Partilhar via


Habilitar despejos de heap para serviços Apache Hadoop no HDInsight baseado em Linux

Os despejos de pilha contêm um instantâneo da memória do aplicativo, incluindo os valores das variáveis no momento em que o despejo foi criado. Portanto, eles são úteis para diagnosticar problemas que ocorrem em tempo de execução.

Serviços

Você pode habilitar despejos de pilha para os seguintes serviços:

  • Apache hcatalog - tempelton
  • Apache hive - hiveserver2, metastore, derbyserver
  • MapReduce - JobHistoryServer
  • Apache yarn - resourcemanager, nodemanager, timelineserver
  • Apache hdfs - datanode, secondarynamenode, namenode

Você também pode habilitar despejos de pilha para o mapa e reduzir os processos executados pelo HDInsight.

Noções básicas sobre a configuração do despejo de pilha

Os despejos de heap são habilitados passando opções (às vezes conhecidas como opts ou parâmetros) para a JVM quando um serviço é iniciado. Para a maioria dos serviços Apache Hadoop , você pode modificar o shell script usado para iniciar o serviço para passar essas opções.

Em cada script, há uma exportação para *_OPTS, que contém as opções passadas para a JVM. Por exemplo, no script hadoop-env.sh , a linha que começa com export HADOOP_NAMENODE_OPTS= contém as opções para o serviço NameNode.

Os processos de mapeamento e redução são ligeiramente diferentes, pois essas operações são um processo filho do serviço MapReduce. Cada processo de mapeamento ou redução é executado em um contêiner filho e há duas entradas que contêm as opções da JVM. Ambos contidos em mapred-site.xml:

  • mapreduce.admin.map.child.java.opts
  • mapreduce.admin.reduce.child.java.opts

Nota

Recomendamos o uso do Apache Ambari para modificar os scripts e as configurações de mapred-site.xml, pois o Ambari manipula a replicação de alterações entre nós no cluster. Consulte a seção Usando o Apache Ambari para obter etapas específicas.

Ativar capturas de área dinâmica para dados

A opção a seguir habilita despejos de pilha quando ocorre um OutOfMemoryError:

-XX:+HeapDumpOnOutOfMemoryError

O + indica que esta opção está ativada. Por predefinição, a opção está desativada.

Aviso

Os despejos de pilha não estão habilitados para serviços Hadoop no HDInsight por padrão, pois os arquivos de despejo podem ser grandes. Se você habilitá-los para solução de problemas, lembre-se de desativá-los depois de reproduzir o problema e reunir os arquivos de despejo.

Local do despejo

O local padrão para o arquivo de despejo é o diretório de trabalho atual. Você pode controlar onde o arquivo é armazenado usando a seguinte opção:

-XX:HeapDumpPath=/path

Por exemplo, o uso -XX:HeapDumpPath=/tmp faz com que os dumps sejam armazenados no diretório /tmp.

Scripts

Você também pode acionar um script quando ocorre um OutOfMemoryError . Por exemplo, acionar uma notificação para que você saiba que o erro ocorreu. Use a seguinte opção para disparar um script em um OutOfMemoryError:

-XX:OnOutOfMemoryError=/path/to/script

Nota

Como o Apache Hadoop é um sistema distribuído, qualquer script usado deve ser colocado em todos os nós do cluster em que o serviço é executado.

O script também deve estar em um local acessível pela conta em que o serviço é executado e deve fornecer permissões de execução. Por exemplo, você pode querer armazenar scripts e /usr/local/bin usá-los chmod go+rx /usr/local/bin/filename.sh para conceder permissões de leitura e execução.

Usando o Apache Ambari

Para modificar a configuração de um serviço, use as seguintes etapas:

  1. Em um navegador da Web, navegue até https://CLUSTERNAME.azurehdinsight.net, onde CLUSTERNAME é o nome do cluster.

  2. Usando a lista de à esquerda, selecione a área de serviço que deseja modificar. Por exemplo, HDFS. Na área central, selecione a guia Configurações .

    Image of Ambari web with HDFS Configs tab selected.

  3. Usando a entrada Filter... , insira opts. Apenas os itens que contêm este texto são exibidos.

    Apache Ambari config filtered list.

  4. Encontre a entrada *_OPTS para o serviço para o qual você deseja habilitar despejos de pilha e adicione as opções que deseja habilitar. Na imagem a seguir, adicionei -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/ à entrada HADOOP_NAMENODE_OPTS :

    Apache Ambari hadoop-namenode-opts.

    Nota

    Ao habilitar despejos de pilha para o mapa ou reduzir o processo filho, procure os campos chamados mapreduce.admin.map.child.java.opts e mapreduce.admin.reduce.child.java.opts.

    Use o botão Salvar para salvar as alterações. Você pode inserir uma breve nota descrevendo as alterações.

  5. Depois que as alterações forem aplicadas, o ícone Reiniciar necessário aparecerá ao lado de um ou mais serviços.

    restart required icon and restart button.

  6. Selecione cada serviço que precisa ser reiniciado e use o botão Ações de serviço para ativar o modo de manutenção. O modo de manutenção impede que alertas sejam gerados a partir do serviço quando você o reinicia.

    Turn on hdi maintenance mode menu.

  7. Depois de ativar o modo de manutenção, use o botão Reiniciar para que o serviço reinicie tudo efetuado

    Apache Ambari Restart All Affected entry.

    Nota

    As entradas para o botão Reiniciar podem ser diferentes para outros serviços.

  8. Depois que os serviços forem reiniciados, use o botão Ações de serviço para desativar o modo de manutenção. Este Ambari para retomar o monitoramento de alertas para o serviço.