我正在运行Hadoop作业,在我的yarn-site.xml文件中,我有以下配置:
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
但是,我偶尔会遇到以下错误:
Container [pid=63375,containerID=container_1388158490598_0001_01_000003] is running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physical memory used; 2.8 GB of 4.2 GB virtual memory used. Killing container.
我发现通过增加yarn.scheduler.minimum-allocation-mb,为容器分配的物理内存会增加。但是,我并不总是希望为我的容器分配4GB,并且认为通过明确指定最大大小,我能够解决这个问题。我意识到Hadoop无法弄清楚在映射器运行之前需要为容器分配多少内存,那么只有在需要额外内存时,我应该如何为容器分配更多内存?
答案 0 :(得分:9)
您还应该正确配置MapReduce的内存分配。来自this HortonWorks tutorial:
[...]
对于我们的示例群集,我们拥有Container的最小RAM (yarn.scheduler.minimum-allocation-mb)= 2 GB。因此我们将分配4 GB 对于Map任务容器,以及8 GB用于Reduce任务容器。
在mapred-site.xml中:
mapreduce.map.memory.mb
:4096
mapreduce.reduce.memory.mb
:8192每个Container都将为Map和Reduce任务运行JVM。 JVM 堆大小应设置为低于Map和Reduce内存 在上面定义,以便它们在Container的范围内 由YARN分配的内存。
在mapred-site.xml中:
mapreduce.map.java.opts
:-Xmx3072m
mapreduce.reduce.java.opts
:-Xmx6144m
以上设置配置物理RAM的上限 Map和Reduce任务将使用。
最后,this thread in the Hadoop mailing list中的某个人遇到了同样的问题,在他们的案例中,结果发现他们的代码中存在内存泄漏。
答案 1 :(得分:0)
如果上述任何配置都没有帮助。如果问题与映射器内存有关,我想建议需要检查的几件事情是。