我正在尝试解决这个令人费解的问题: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 = 1024
和yarn.app.mapreduce.am.command-opts = -Xmx825955249
),其他MRAppMaster实例也可以正常运行。 -Xmx
已经减少到512MB,看看问题是否仍然会出现~500MB的余量。我希望MRAppMaster能够消耗很少的本机内存,那些额外的500MB会是什么呢?我会尝试通过增加yarn.app.mapreduce.am.resource.mb
来解决这个问题,但我真的很想了解发生了什么。有什么想法吗?
config:cdh-5.4