Container is running beyond virtual memory limits
异常显示
Container [pid=100287,containerID=container_1513249052998_0007_01_000009] is
running beyond virtual memory limits. Current usage: 611.1 MB of 1 GB physical
memory used; 4.9 GB of 3 GB virtual memory used. Killing container.
异常分析
611.1MB: 任务所占的物理内存
1GB 是mapreduce.map.memory.mb 设置的
4.9G 是程序占用的虚拟内存: 什么是虚拟内存以及和物理内存的关系
3GB 是mapreduce.map.memory.db 乘以 yarn.nodemanager.vmem-pmem-ratio 得到的
其中yarn.nodemanager.vmem-pmem-ratio 是 虚拟内存和物理内存比例,在yarn-site.xml中设置,默认是2.1, 由于我本地设置的是3, 所以 1*3 = 3GB
很明显,container占用了4.9G的虚拟内存,但是分配给container的却只有3GB。所以kill掉了这个container
上面只是map中产生的报错,当然也有可能在reduce中报错,如果是reduce中,那么就是mapreduce.reduce.memory.db * yarn.nodemanager.vmem-pmem-ratio
解决办法:(1)修改mapred-site.xml
<property>
<name>mapreduce.map.memory.mb</name>
<value>1536</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1024M</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>3072</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2560M</value>
</property>
解决办法:(2)修改yarn-site.xml
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.5</value>
</property>
附录
Container [pid=100287,containerID=container_1513249052998_0007_01_000009] is
running beyond virtual memory limits. Current usage: 611.1 MB of 1 GB physical
memory used; 4.9 GB of 3 GB virtual memory used. Killing container.
异常分析
611.1MB: 任务所占的物理内存
1GB 是mapreduce.map.memory.mb 设置的
4.9G 是程序占用的虚拟内存: 什么是虚拟内存以及和物理内存的关系
3GB 是mapreduce.map.memory.db 乘以 yarn.nodemanager.vmem-pmem-ratio 得到的
其中yarn.nodemanager.vmem-pmem-ratio 是 虚拟内存和物理内存比例,在yarn-site.xml中设置,默认是2.1, 由于我本地设置的是3, 所以 1*3 = 3GB
很明显,container占用了4.9G的虚拟内存,但是分配给container的却只有3GB。所以kill掉了这个container
上面只是map中产生的报错,当然也有可能在reduce中报错,如果是reduce中,那么就是mapreduce.reduce.memory.db * yarn.nodemanager.vmem-pmem-ratio
解决办法:(1)修改mapred-site.xml
<property>
<name>mapreduce.map.memory.mb</name>
<value>1536</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1024M</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>3072</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx2560M</value>
</property>
解决办法:(2)修改yarn-site.xml
<property>
<name>yarn.nodemanager.vmem-pmem-ratio</name>
<value>2.5</value>
</property>
附录
参数名称 | 缺省值 | 说明 |
mapreduce.job.name |
|
作业名称 |
mapreduce.job.priority | NORMAL | 作业优先级 |
yarn.app.mapreduce.am.resource.mb | 1536 | MR ApplicationMaster占用的内存量 |
yarn.app.mapreduce.am.resource.cpu-vcores | 1 | MR ApplicationMaster占用的虚拟CPU个数 |
mapreduce.am.max-attempts | 2 | MR ApplicationMaster最大失败尝试次数 |
mapreduce.map.memory.mb | 1024 | 每个Map Task需要的内存量 |
mapreduce.map.cpu.vcores | 1 | 每个Map Task需要的虚拟CPU个数 |
mapreduce.map.maxattempts | 4 | Map Task最大失败尝试次数 |
mapreduce.reduce.memory.mb | 1024 | 每个Reduce Task需要的内存量 |
mapreduce.reduce.cpu.vcores | 1 | 每个Reduce Task需要的虚拟CPU个数 |
mapreduce.reduce.maxattempts | 4 | Reduce Task最大失败尝试次数 |
mapreduce.map.speculative | false | 是否对Map Task启用推测执行机制 |
mapreduce.reduce.speculative | false | 是否对Reduce Task启用推测执行机制 |
mapreduce.job.queuename | default | 作业提交到的队列 |
mapreduce.task.io.sort.mb | 100 | 任务内部排序缓冲区大小 |
mapreduce.map.sort.spill.percent | 0.8 | Map阶段溢写文件的阈值(排序缓冲区大小的百分比) |
mapreduce.reduce.shuffle.parallelcopies | 5 | Reduce Task启动的并发拷贝数据的线程数目 |