java—将垃圾收集日志保存到${yarn.nodemanager.log dirs}/application{appid}/container{contid},用于hadoop yarn上的Map器和还原器

xienkqul  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(385)

我正在尝试为我的Map器和还原器记录垃圾收集度量。但是,我无法获取日志以进入路径: ${yarn.nodemanager.log-dirs}/application_${appid}/container_${contid} 以下是我的mapred-site.xml及其相关属性的外观: <property> <name>mapreduce.map.java.opts</name> <value>-Xloggc:${yarn.nodemanager.log-dirs}/application_${appid}/container_${contid}/gc-@taskid@.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}/gc-@taskid@.log -verbose:gc -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintCommandLineFlags</value> </property> 但是,尽管有上述配置,日志并没有显示在正确的位置。对这一问题的任何见解都将不胜感激。

dm7nw8vv

dm7nw8vv1#

我使用以下属性解决了此问题: ${yarn.app.container.log.dir} 登录 ${yarn.nodemanager.log-dirs}/application_${appid}/container_${contid} 目录
所以我使用的完整配置如下:

<property>
    <name>mapreduce.map.java.opts</name>
    <value>-Xloggc:${yarn.app.container.log.dir}/gc-@taskid@.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}/gc-@taskid@.log -verbose:gc -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintCommandLineFlags</value>
</property>
oknwwptz

oknwwptz2#

ps xww 或检查 /proc/<pid>/cmdline 查看标志是否与预期值一起传递给jvm
检查目录是否存在

r1wp621o

r1wp621o3#

考虑到你的旗帜似乎是正确的,我建议打印的旗帜,该委员会 Java 进程正在按照8472的建议加载。
就我个人而言,我对hadoop并不熟悉,但我对您描述的场景进行研究的最初步骤之一是检查所使用的变量的值,主要是 ${yarn.nodemanager.log-dirs} 可能有以下情况: /opt/path to my/app 这可能导致 -Xloggc 值仅为 /opt/path .
最后,我建议您进行一些测试,以确保正确解释这些值:

-Xloggc:/tmp/application_${appid}/container_${contid}/gc-@taskid@.log -verbose:gc -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+PrintCommandLineFlags

我将努力改进这个答案,稍后再详细说明。

相关问题