Hadoop纱线容器不会分配足够的空间

Ols*_*nsk 7 hadoop

我正在运行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>
Run Code Online (Sandbox Code Playgroud)

但是,我偶尔会遇到以下错误:

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.
Run Code Online (Sandbox Code Playgroud)

我发现通过增加yarn.scheduler.minimum-allocation-mb,为容器分配的物理内存会增加.但是,我并不总是希望为我的容器分配4GB,并且认为通过明确指定最大大小,我可以解决这个问题.我意识到Hadoop无法确定在映射器运行之前需要为容器分配多少内存,所以如果需要额外内存,我应该如何为容器分配更多内存?

cab*_*bad 9

您还应该正确配置MapReduce的内存分配.从这个HortonWorks教程:

[...]

对于我们的示例集群,我们有一个容器的最小RAM(yarn.scheduler.minimum-allocation-mb)= 2 GB.因此,我们将为Map任务容器分配4 GB,为Reduce任务容器分配8 GB.

在mapred-site.xml中:

mapreduce.map.memory.mb:4096

mapreduce.reduce.memory.mb:8192

每个Container都将运行JVM以执行Map和Reduce任务.JVM堆大小应设置为低于上面定义的Map和Reduce内存,以便它们在YARN分配的Container内存的范围内.

在mapred-site.xml中:

mapreduce.map.java.opts: -Xmx3072m

mapreduce.reduce.java.opts: -Xmx6144m

上述设置配置了Map和Reduce任务将使用的物理RAM的上限.

最后,Hadoop邮件列表此线程中的某个人遇到了同样的问题,在他们的情况下,结果发现他们的代码中存在内存泄漏.