MP和Yarn的内存问题

参考

http://zh.hortonworks.com/blog/how-to-plan-and-configure-yarn-in-hdp-2-0/

http://stackoverflow.com/questions/21005643/container-is-running-beyond-memory-limits

一,错误:

Diagnostic Messages for this Task:
Container [pid=7830,containerID=container_1397098636321_27548_01_000297] is running beyond physical memory limits. Current usage: 1.4 GB of 1 GB physical memory used; 2.7 GB of 4.2 GB virtual memory used. Killing container.

默认不设置的情况下,ResourceManager会给每个map、reduce任务分配1G大小的物理内存

解决:

mapred-site.xml:

  mapreduce.map.memory.mb: 4096

  mapreduce.reduce.memory.mb: 8192

Map容器和Reduce容器的内存大小。上面的数字是根据你机器的内存大小来设置的。reduce一般要比map大

  mapreduce.map.java.opts: -Xmx3072m

  mapreduce.reduce.java.opts: -Xmx6144m

Map和Reduce任务所允许的最大内存。分别比上面两个数字要小。因为还得分配给yarn内存


二, 错误
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

你可能感兴趣的:(mapreduce,hadoop,yarn,内存管理,物理内存,虚拟内存)