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:
Navigieren Sie in einem Webbrowser zu
https://CLUSTERNAME.azurehdinsight.net
, wobeiCLUSTERNAME
der Name Ihres Clusters ist.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.
Geben Sie im Feld Filter den Text opts ein. Es werden nur Elemente mit diesem Text angezeigt.
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: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.
Nachdem die Änderungen angewendet wurden, wird das Symbol für Neustart erforderlich neben einem oder mehreren Diensten angezeigt.
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.
Nachdem Sie den Wartungsmodus aktiviert haben, verwenden Sie die Schaltfläche Restart für den Dienst, um Restart All Effected auszuwählen.
Hinweis
Die Einträge für die Schaltfläche Restart (Neu starten) können für andere Dienste anders lauten.
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.