Aktivieren von Heapdumps für Apache Hadoop-Dienste in Linux-basiertem HDInsight

Heapdumps enthalten eine Momentaufnahme des Speichers der Anwendung, einschließlich der Werte von Variablen zum Zeitpunkt der Dumperstellung. Daher sind sie zum Diagnostizieren von Problemen nützlich, die bei der Ausführung auftreten.

Dienste

Sie können Heapdumps für die folgenden Dienste aktivieren:

  • Apache hcatalog: tempelton
  • Apache hive: hiveserver2, metastore, derbyserver
  • mapreduce : jobhistoryserver
  • Apache yarn: resourcemanager, nodemanager, timelineserver
  • Apache hdfs: datanode, secondarynamenode, namenode

Sie können Heapdumps auch für die Mapper- und Reducer-Prozesse aktivieren, die von HDInsight ausgeführt wurden.

Grundlegendes zur Konfiguration von Heapdumps

Heapdumps werden aktiviert, indem Optionen (oder Parameter) an die JVM übergeben werden, wenn ein Dienst gestartet wird. Für die meisten Apache Hadoop-Dienste können Sie das zum Starten des Diensts verwendete Shellskript ändern, um diese Optionen zu übergeben.

In jedem Skript ist ein Export für *_OPTS vorhanden, der die an die JVM übergebenen Optionen enthält. Beispiel: Im Skript hadoop-env.sh enthält die Zeile, die mit export HADOOP_NAMENODE_OPTS= beginnt, die Optionen für den NameNode-Dienst.

Mapper- und Reducer-Prozesse unterscheiden sich geringfügig, da diese untergeordnete Prozesse des MapReduce-Diensts sind. Jeder Mapper- oder Reducer-Prozess wird in einem untergeordneten Container ausgeführt, und es gibt zwei Einträge, die die JVM-Optionen enthalten. Beide sind in mapred-site.xmlenthalten:

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

Hinweis

Wir empfehlen die Verwendung von Apache Ambari zum Ändern der Skripts und der Einstellungen in „mapred-site.xml“, da Ambari das Replizieren von Änderungen auf Knoten im Cluster verarbeitet. Unter Verwenden von Apache Ambari finden Sie die detaillierten Schritte.

Aktivieren von Heapdumps

Die folgende Option aktiviert Heapdumps bei einem "OutOfMemoryError":

-XX:+HeapDumpOnOutOfMemoryError

Das + -Zeichen gibt an, dass diese Option aktiviert ist. Der Standardwert ist deaktiviert.

Warnung

Heapdumps sind für Hadoop-Dienste auf HDInsight-Clustern nicht standardmäßig aktiviert, da die Dumpdateien groß sein können. Wenn Sie sie zur Problembehandlung aktivieren, denken Sie daran, sie zu deaktivieren, sobald Sie das Problem reproduziert und die Dumpdateien gesammelt haben.

Dumpspeicherort

Der Standardspeicherort für die Dumpdatei ist das aktuelle Arbeitsverzeichnis. Sie können steuern, wo die Datei gespeichert wird, indem Sie die folgende Option verwenden:

-XX:HeapDumpPath=/path

Beispiel: -XX:HeapDumpPath=/tmp bewirkt, dass die Dumps im Verzeichnis „/temp“ gespeichert werden.

Skripts

Sie können auch ein Skript auslösen, wenn ein OutOfMemoryError auftritt. So können Sie beispielsweise eine Benachrichtigung auslösen, damit Sie wissen, dass der Fehler aufgetreten ist. Verwenden Sie die folgende Option, um ein Skript auszulösen, wenn OutOfMemoryError auftritt:

-XX:OnOutOfMemoryError=/path/to/script

Hinweis

Da Apache Hadoop ein verteiltes System ist, muss jedes verwendete Skript auf allen Knoten im Cluster vorhanden sein, auf denen der Dienst ausgeführt wird.

Das Skript muss sich zudem an einem Speicherort befinden, auf den das Konto zugreifen kann, mit dem der Dienst ausgeführt wird, und Ausführungsberechtigungen müssen gewährt werden. Sie könnten z. B. Skripts in /usr/local/bin speichern und chmod go+rx /usr/local/bin/filename.sh zum Gewähren von Lese- und Ausführungsberechtigungen verwenden.

Verwenden von Apache Ambari

Gehen Sie folgendermaßen vor, um die Konfiguration für einen Dienst zu ändern:

  1. Navigieren Sie in einem Webbrowser zu https://CLUSTERNAME.azurehdinsight.net, wobei CLUSTERNAME der Name Ihres Clusters ist.

  2. Wählen Sie mithilfe der Liste auf der linken Seite den Dienstbereich aus, den Sie ändern möchten. Beispielsweise HDFS. Wählen Sie im mittleren Bereich die Registerkarte Configs aus.

    Image of Ambari web with HDFS Configs tab selected.

  3. Geben Sie im Feld Filter den Text opts ein. Es werden nur Elemente mit diesem Text angezeigt.

    Apache Ambari config filtered list.

  4. Suchen Sie nach dem Eintrag *_OPTS für den Dienst, für den Sie Heapdumps aktivieren möchten, und fügen die Optionen hinzu, die Sie aktivieren möchten. In der folgenden Abbildung wurde -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp/ dem Eintrag HADOOP_NAMENODE_OPTS hinzugefügt:

    Apache Ambari hadoop-namenode-opts.

    Hinweis

    Beim Aktivieren von Heapdumps für den untergeordneten Mapper- oder Reducer-Prozess suchen Sie nach den Feldern mit der Bezeichnung mapreduce.admin.map.child.java.opts und mapreduce.admin.reduce.child.java.opts.

    Verwenden Sie die Schaltfläche Save , um die Änderungen zu speichern. Sie können einen kurzen Hinweis zur Beschreibung der Änderungen eingeben.

  5. Nachdem die Änderungen angewendet wurden, wird das Symbol für Neustart erforderlich neben einem oder mehreren Diensten angezeigt.

    restart required icon and restart button.

  6. Wählen Sie jeden Dienst aus, für den ein Neustart erforderlich ist, und verwenden Sie die Schaltfläche Service Actions, um Turn On Maintenance Mode auszuwählen. Der Wartungsmodus verhindert, dass Warnungen von dem Dienst generiert werden, wenn Sie ihn neu starten.

    Turn on hdi maintenance mode menu.

  7. Nachdem Sie den Wartungsmodus aktiviert haben, verwenden Sie die Schaltfläche Restart für den Dienst, um Restart All Effected auszuwählen.

    Apache Ambari Restart All Affected entry.

    Hinweis

    Die Einträge für die Schaltfläche Restart (Neu starten) können für andere Dienste anders lauten.

  8. Verwenden Sie nach dem Neustart der Dienste die Schaltfläche Service Actions, um Turn Off Maintenance Mode auszuwählen. Dadurch setzt Ambari das Überwachen auf Warnungen für den Dienst fort.