mr报错
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
解决方法
- physical memory used; 2.2 GB of 2.1 GB 这里说的map或者reduce的container的物理内存不够了,所以要加map和reduce加大内存。cdh直接搜索配置即可添加。
<property><name>mapreduce.map.memory.mb</name><value>4096</value></property><property><name>mapreduce.reduce.memory.mb</name><value>4096</value></property>
- 往往呢光加这个参数不好使(因为你设置的不够大),还需要再改一下配置(取消虚拟内存的检查)
yarn.nodemanager.pmem-check-enabled :false
其中 yarn.nodemanager.vmem-pmem-ratio 是 虚拟内存和物理内存比例,在yarn-site.xml中设置,默认是2.1,适当增大。
很明显,container占用了2.8G的虚拟内存,但是分配给container的却只有2.1GB。所以kill掉了这个container
其实不太推荐yarn.nodemanager.pmem-check-enabled设置为false,因为往往会使用虚拟内存导致任务变慢。你可以单纯的增大map和reduce的内存,这样就会间接增大虚拟内存(因为他们之际有比例关系2.1啊)
<property><name>yarn.nodemanager.vmem-check-enabled</name><value>false</value><description>Whether virtual memory limits will be enforced for containers</description></property><property><name>yarn.nodemanager.vmem-pmem-ratio</name><value>4</value><description>Ratio between virtual memory to physical memory when setting memory limits for containers</description></property>
yarn 参数详解2
YARN的Memory和CPU调优配置详解–官网翻译
yarn参数3
mapreduce.map.java.opts 是分给map任务的jvm进程的heap大小,所以他要小于container的大小 一般为 0.8左右