RMAppMaster超出了物理内存限制

时间:2017-12-01 16:47:14

标签: hadoop mapreduce yarn oozie cloudera-cdh

我正在尝试解决这个令人费解的问题:RMAppMaster超越其分配的容器内存,然后被节点管理器杀死,即使堆大小远小于容器大小。

NM日志:

2017-12-01 11:18:49,863 INFO org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Memory usage of ProcessTree 14191 for container-id container_1506599288376_62101_01_000001: 1.0 GB of 1 GB physical memory used; 3.1 GB of 2.1 GB virtual memory used
2017-12-01 11:18:49,863 WARN org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Process tree for container: container_1506599288376_62101_01_000001 has processes older than 1 iteration running over the configured limit. Limit=1073741824, current usage = 1076969472
2017-12-01 11:18:49,863 WARN org.apache.hadoop.yarn.server.nodemanager.containermanager.monitor.ContainersMonitorImpl: Container [pid=14191,containerID=container_1506599288376_62101_01_000001] is running beyond physical memory limits. Current usage: 1.0 GB of 1 GB physical memory used; 3.1 GB of 2.1 GB virtual memory used. Killing container.
Dump of the process-tree for container_1506599288376_62101_01_000001 :
        |- 14279 14191 14191 14191 (java) 4915 235 3167825920 262632 /usr/java/default//bin/java -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1506599288376_62101/container_1506599288376_62101_01_000001 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA -Djava.net.preferIPv4Stack=true -Xmx512m org.apache.hadoop.mapreduce.v2.app.MRAppMaster 
        |- 14191 14189 14191 14191 (bash) 0 1 108650496 300 /bin/bash -c /usr/java/default//bin/java -Dlog4j.configuration=container-log4j.properties -Dyarn.app.container.log.dir=/var/log/hadoop-yarn/container/application_1506599288376_62101/container_1506599288376_62101_01_000001 -Dyarn.app.container.log.filesize=0 -Dhadoop.root.logger=INFO,CLA  -Djava.net.preferIPv4Stack=true -Xmx512m org.apache.hadoop.mapreduce.v2.app.MRAppMaster 1>/var/log/hadoop-yarn/container/application_1506599288376_62101/container_1506599288376_62101_01_000001/stdout 2>/var/log/hadoop-yarn/container/application_1506599288376_62101/container_1506599288376_62101_01_000001/stderr

您可以观察到,当堆大小设置为512MB时,NM观察到的物理内存增长到1GB。

应用程序是一个Oozie启动器(Hive任务),因此它只有一个映射器,它几乎没有任何东西,也没有减速器。

令我感到困惑的是,只有MRAppMaster的这个特定实例被杀死,我无法解释NM定义的最大堆大小和物理内存之间的500MB开销:

  • 即使使用默认配置(yarn.app.mapreduce.am.resource.mb = 1024yarn.app.mapreduce.am.command-opts = -Xmx825955249),其他MRAppMaster实例也可以正常运行。
  • MRAppMaster不运行任何特定于应用程序的代码,为什么只有这个代码有问题?我希望MRAppMaster的内存消耗与任务/尝试次数呈线性关系,这个应用程序只有一个映射器。
  • -Xmx已经减少到512MB,看看问题是否仍然会出现~500MB的余量。我希望MRAppMaster能够消耗很少的本机内存,那些额外的500MB会是什么呢?

我会尝试通过增加yarn.app.mapreduce.am.resource.mb来解决这个问题,但我真的很想了解发生了什么。有什么想法吗?

config:cdh-5.4

0 个答案:

没有答案