hadoop:运行超出虚拟内存限制,显示大量数据

0wi1tuuw  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(646)

我正在运行一个mapreduce pipes程序,我已将内存限制设置为:
在yarn-site.xml中:

<property>
            <name>yarn.nodemanager.resource.memory-mb</name>
            <value>3072</value>
</property>
<property>
            <name>yarn.scheduler.minimum-allocation-mb</name>
            <value>256</value>
</property>

在mapred-site.xml中:

<property>
            <name>mapreduce.map.memory.mb</name>
            <value>512</value>
</property>
<property>
            <name>mapreduce.reduce.memory.mb</name>
            <value>512</value>
</property>
<property>
            <name>mapreduce.map.java.opts</name>
            <value>-Xmx384m</value>
</property>
<property>
            <name>mapreduce.reduce.java.opts</name>
            <value>-Xmx384m</value>
</property>

我目前正在一个节点上以伪分布式模式运行。在杀死容器之前,我遇到以下错误:

2015-04-11 12:47:49,594 INFO [AsyncDispatcher event handler] org.apache.hadoop.mapreduce.v2.app.job.impl.TaskAttemptImpl: Diagnostics report from attempt_1428741438743_0001_m_000000_0: Container [pid=8140,containerID=container_1428741438743_0001_01_000002] is running beyond virtual memory limits. Current usage: 304.1 MB of 1 GB physical memory used; 1.0 TB of 2.1 GB virtual memory used. Killing container.

我最关心的是使用了1.0 tb的虚拟内存,我运行的应用程序远没有消耗这么多内存,甚至远没有消耗1 gb内存。
这是否意味着我的代码中存在内存泄漏,或者我的内存配置可能是错误的?
谢谢您。
当做,

dohp0rv5

dohp0rv51#

我发现了问题所在:在我的部分代码中,每个Map者都必须访问本地lmdb数据库。当一个lmdb数据库启动时,它会保留1tb的虚拟内存,这使得hadoop认为我使用了这么多内存,而实际上我没有。
我通过在yarn-site.xml中将yarn.nodemanager.vmem-check-enabled设置为false解决了这个问题,这可以防止hadoop检查虚拟内存限制。请注意,除非您确定,否则不应该使用它,因为hadoop正试图通过此检查来保护您免受内存泄漏和类似问题的影响。我用它只是因为我确信它不是内存泄漏

相关问题