1.1 GB of1 GB physical memory used

原文链接 : https://blog.csdn.net/dd390738878/article/details/9785679

问题描述:在跑一个mapreduce程序的过程中,提示内存溢出的错误,确定非程序影响。
百度了很多可能的问题产生原因,依次排除后,终于解决了。想把前人的经验总结一下方便后人查阅。


异常提示:Container [pid=23708,containerID=container_1369623433359_0404_01_000151] is running beyond physical memory limits. Current usage: 3.2gb of 3.0gb physical memory used; 4.5gb of 6.3gb virtual memory used. Killing container.

1. io.file.buffer.size 的设置问题
    io.file.buffer.size 的值设置过大,map和reduce的任务可能会存在溢出。我这个值的设置是128k,其实不大,后来改成4k仍然出现异常证明不是这个问题. (io.file.buffer.size作为hadoop缓冲区,用于 hadoop读hdfs的文件和写hdfs的文件,还有map的输出都用到了这个缓冲区容量)


2. yarn的虚拟内存计算方式导致

这个问题应该是导致running beyond virtual memory limits.虽然没有解决问题,但感觉不知道这个的人很容易被坑的
running beyond virtual memory limits. Current usage: 32.1mb of 1.0gb physical memory used; 6.2gb of 2.1gb virtual memory used. Killing container。
该错误是YARN的虚拟内存计算方式导致,上例中用户程序申请的内存为1Gb,YARN根据此值乘以一个比例(默认为2.1)得出申请的虚拟内存的 值,当YARN计算的用户程序所需虚拟内存值大于计算出来的值时,就会报出以上错误。调节比例值可以解决该问题。具体参数为:yarn-site.xml 中的yarn.nodemanager.vmem-pmem-ratio

3.内存监控的问题

看到网上有人说,hadoop有个内存监控,可以设置当task,map,reduce or job 的累计使用的内存量大于limit的时候kill 程序。

第一,我增加了一倍reduce的数目,试着跑了一下,successed

第二,我保持之前的reduce的数目,在mapred-site.xml 配置文件中加入了两段语句 同样successed
<property>
<name>mapreduce.cluster.map.memory.mb</name>
<value>-1</value>
</property>
<property>
<name>mapreduce.cluster.reduce.memory.mb</name>
<value>-1</value>
</property>


第一个目的很明显是分摊每个reduce的累计内存使用量
第二个的目的是关闭监控机制,只有值大于0的时候才会启动,当然默认值是-1,
只不过我设置了mapreduce.{map|reduce}.memory.mb。 看大神的博客里有这么一句话“They typically match the default values set for the options mapreduce.{map|reduce}.memory.mb。”
只是对于官网文档上的此配置解释的 vitual memory还有一点疑惑。

关于内存配置 见
http://blog.csdn.net/amaowolf/article/details/7188504
————————————————
版权声明:本文为CSDN博主「Lawrence费」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/dd390738878/article/details/9785679

猜你喜欢

转载自blog.csdn.net/weixin_39445556/article/details/106494949
gb