将垃圾收集日志保存到 ${yarn.nodemanager.log-dirs}/application_${appid}/container_${contid} 中,用于 Hadoop Yarn 上的映射器和缩减器
Saving garbage collection logs into ${yarn.nodemanager.log-dirs}/application_${appid}/container_${contid} for mappers and reducers on Hadoop Yarn
我正在尝试记录我的映射器和缩减器的垃圾收集指标。但是我无法让日志进入路径:
${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>
但是尽管进行了上述配置,日志仍未出现在正确的位置。非常感谢对此问题的任何见解。
- 运行
ps xww
或检查 /proc/<pid>/cmdline
以查看标志是否与预期值一起传递给 JVM
- 检查目录是否存在
考虑到您提供的标志似乎是正确的,我建议按照 the8472 的建议打印 Java
进程正在加载的标志。
就个人而言,我不熟悉 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
我会尝试改进这个答案,稍后再详细说明。
我使用 属性 解决了这个问题:
${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>
我正在尝试记录我的映射器和缩减器的垃圾收集指标。但是我无法让日志进入路径:
${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>
但是尽管进行了上述配置,日志仍未出现在正确的位置。非常感谢对此问题的任何见解。
- 运行
ps xww
或检查/proc/<pid>/cmdline
以查看标志是否与预期值一起传递给 JVM - 检查目录是否存在
考虑到您提供的标志似乎是正确的,我建议按照 the8472 的建议打印 Java
进程正在加载的标志。
就个人而言,我不熟悉 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
我会尝试改进这个答案,稍后再详细说明。
我使用 属性 解决了这个问题:
${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>