Speichern von Garbage Collection-Protokollen in $ {yarn.nodemanager.log-dirs} / application _ $ {appid} / container _ $ {contid} für Mapper und Reducer auf Hadoop Yarn

9

Ich versuche, Garbage Collection-Messwerte für meine Mapper und Reducer zu protokollieren. Ich kann die Protokolle jedoch nicht in den Pfad einfügen:
${yarn.nodemanager.log-dirs}/application_${appid}/container_${contid}

Hier ist, was meine mapred-site.xml mit den relevanten Eigenschaften aussieht:

<property> <name>mapreduce.map.java.opts</name> <value>-Xloggc:${yarn.nodemanager.log-dirs}/application_${appid}/container_${contid}/[email protected]@.log -verbose:gc -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintCommandLineFlags</value> </property> <property> <name>mapreduce.reduce.java.opts</name> <value>-Xloggc:${yarn.nodemanager.log-dirs}/application_${appid}/container_${contid}/[email protected]@.log -verbose:gc -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintCommandLineFlags</value> </property>

Aber die Protokolle erscheinen trotz der oben genannten Konfigurationen nicht an der richtigen Stelle. Alle Einblicke in dieses Thema würden sehr geschätzt.

    
krishnang 01.09.2016, 18:15
quelle

3 Antworten

0

Ich habe dieses Problem mithilfe der folgenden Eigenschaft behoben: ${yarn.app.container.log.dir} , um sich im Verzeichnis $ {yarn.nodemanager.log-dirs} / application _ $ {appid} / container _ $ {contid}

anzumelden

Also die vollständige Konfiguration, die ich verwendet habe, ist wie folgt:

<property> <name>mapreduce.map.java.opts</name> <value>-Xloggc:${yarn.app.container.log.dir}/[email protected]@.log -verbose:gc -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintCommandLineFlags</value> </property> <property> <name>mapreduce.reduce.java.opts</name> <value>-Xloggc:${yarn.app.container.log.dir}/[email protected]@.log -verbose:gc -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintCommandLineFlags</value> </property>

    
krishnang 12.09.2016, 19:08
quelle
1
  1. Führen Sie ps xww oder inspect /proc/<pid>/cmdline aus, um zu sehen, ob die Flags mit den erwarteten Werten an die JVM
  2. übergeben werden
  3. überprüfe, ob die Verzeichnisse existieren
the8472 04.09.2016 16:48
quelle
1

In Anbetracht der Tatsache, dass die von Ihnen präsentierten Flags ungefähr richtig sind, würde ich vorschlagen, die Flags zu drucken, die der Prozess Java lädt, wie von der 8472 vorgeschlagen.

Persönlich bin ich nicht mit hadoop vertraut, aber einer meiner ersten Schritte in dem von Ihnen beschriebenen Szenario wäre es, den Wert der verwendeten Variablen zu überprüfen, hauptsächlich ${yarn.nodemanager.log-dirs} könnte etwas wie: /opt/path to my/app haben, das könnte Der -Xloggc -Wert darf nur /opt/path sein.

Schließlich würde ich vorschlagen, dass Sie einige Tests durchführen, um sicherzustellen, dass die Werte korrekt interpretiert werden:

%Vor%

Ich werde versuchen, diese Antwort zu verbessern und später ein bisschen genauer zu beschreiben.

    
bayetovsky 06.09.2016 15:48
quelle