在Hadoop v1中,我已经分配了每个大小为1GB的映射器和减速器插槽,我的映射器&减速器运行良好。我的机器有8G内存,8个处理器。 现在用YARN,当在同一台机器上运行相同的应用程序时,我得到了容器错误。 默认情况下,我有这样的设置:容器运行超出内存限制
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>1024</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
</property>
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
它给了我错误:
Container [pid=28920,containerID=container_1389136889967_0001_01_000121] is running beyond virtual memory limits. Current usage: 1.2 GB of 1 GB physical memory used; 2.2 GB of 2.1 GB virtual memory used. Killing container.
我又试图在mapred-site.xml中的内存限制:
<property>
<name>mapreduce.map.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
但仍然出现错误:
Container [pid=26783,containerID=container_1389136889967_0009_01_000002] is running beyond physical memory limits. Current usage: 4.2 GB of 4 GB physical memory used; 5.2 GB of 8.4 GB virtual memory used. Killing container.
我很困惑为什么地图任务需要这么多的内存。根据我的理解,1GB的内存足够用于我的地图/缩小任务。为什么当我给容器分配更多内存时,这个任务使用更多?是因为每个任务都会分裂吗?我觉得稍微减小容器的大小并创建更多容器会更有效,因此可以同时运行更多的任务。问题是我怎样才能确保每个容器不会被分配更多的分裂比它可以处理?
的[Hadoop的纱线容器没有分配足够的空间]可能重复(http://stackoverflow.com/questions/20803577/hadoop -yarn-container-does-not-allocate-enough-space) – Sheena
嗨!你的配置'yarn.nodemanager.vmem-pmem-ratio = 2'? – sprite