关于yarn平台下mapreduce运行出现的虚拟内存溢出问题
2014年09月05日 ⁄ 综合 ⁄ 共 756字 ⁄ 字号 小 中 大 ⁄ 评论关闭
最近在测试一个统计类型的mapreduce 应用的job新功能时候,reducetask在运行中直接抛出了下面的异常:
Container [pid=23708,containerID=container_1369623433359_0404_01_000151]
is running beyond physical memory limits. Current usage: 192Mb of 1.0gb physical memory used; 2.9gb of 2.1gb virtual memory used. Killing container.
设置了10个reducetask,而每个reducetask的4次尝试 taskattempt 都失败了 都以为同样的虚拟内存的溢出问题。由于该Yarn所在的集群规模比较小,相应的机器的配置也不高,平均每台服务器的内存只有20G左右,因此之前我在配置task的container的大小的时候,每个container的物理内存配置为1024M
,而yarn-site.xml 中的yarn.nodemanager.vmem-pmem-ratio的比例采用默认的2.1,根据这个比例 计算出来的预分配的虚拟内存为2.1G,而在实际运行中,发现单个reducetask需要2.9G的虚拟内存,因此导致了异常的出现。虽然通过调整了yarn-site.xml中的参数,通过增大虚拟内存的方式
解决了job中的内存错误,但心里还是有那个疙瘩。当初自己在开发这个 统计任务的时候,数据量比当前大的多的情况下都没出现过该问题,简单的通过内存参数调整并不能真正解决问题,问题的隐患也不一定被完全发现,问题应该还是出在job对于资源的申请上。接下来估计会仔细研究下该job是否存在着什么问题,毕竟一旦发布到线上,将会迎来大数据量的考验。
即修改2.1 为 3
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>3</value>
</property>