当前位置: 首页 > 知识库问答 >
问题:

Hadoop:运行超出虚拟内存限制,显示巨大的数字

徐秋月
2023-03-14

我正在运行一个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个答案

锺离高丽
2023-03-14

我发现了问题所在:在我的部分代码中,每个映射器都必须访问本地lmdb数据库。当一个lmdb数据库启动时,它会保留1 TB的虚拟内存,这导致Hadoop认为我在使用这么多内存,而实际上我没有。

我通过在yarn-site.xml中将yarn.nodemanager.vmem-check-enabled设置为false,从而防止Hadoop检查虚拟内存限制,从而解决了这个问题。请注意,除非您确信它,否则您不应该使用它,因为Hadoop试图通过这种检查来保护您免受内存泄漏和类似问题的影响。我使用它只是因为我确定这不是内存泄漏

 类似资料:
  • 我有一个linux用户,软虚拟内存限制(ulimit-v)设置为aroud 5GB。 考虑到这一点,我试着做: 我的问题是:我关于ulimit-v>=VmSizes之和的假设正确吗?如果不是,软限制实际上是什么意思?是否有可能超过特定用户的软限制,并仍然可以接受它? 顺便说一句,ulimit-v-h被设置为unlimited,这有什么不同。

  • 问题内容: 我使用了sun网站的“内存不足”帮助。引用为 内存不足:请求的阵列大小超出了VM限制 这表明应用程序试图分配一个大于堆大小的数组。例如,如果应用程序尝试分配512MB的数组,但最大堆大小为256MB,则将引发此错误。在大多数情况下,问题可能是堆大小太小,或者是错误导致应用程序尝试创建其大小计算错误地巨大的数组。 我试图通过模拟 在我的机器上 但是上面的线正在产生 我想念什么? 更新:

  • 主要内容:虚拟内存如何工作?,按需分页,虚拟内存管理系统的快照虚拟内存是一种存储方案,为用户提供了一个拥有非常大的主内存的幻觉。 这是通过将辅助存储器的一部分作为主存储器来完成的。 在这种方案中,用户可以加载比可用主存更大的进程,因为存在内存可用于加载进程的错觉。 操作系统不是在主内存中加载一个大进程,而是在主内存中加载多个进程的不同部分。 通过这样做,多程序的程度将会增加,因此CPU利用率也会增加。 虚拟内存如何工作? 在现代语言中,虚拟内存近来变得非常普

  • 处理器的虚拟内存子系统为每个进程实现了虚拟地址空间。这让每个进程认为它在系统中是独立的。虚拟内存的优点列表别的地方描述的非常详细,所以这里就不重复了。本节集中在虚拟内存的实际的实现细节,和相关的成本。 虚拟地址空间是由CPU的内存管理单元(MMU)实现的。OS必须填充页表数据结构,但大多数CPU自己做了剩下的工作。这事实上是一个相当复杂的机制;最好的理解它的方法是引入数据结构来描述虚拟地址空间。

  • 这是一个Leetcode问题374。猜数字高或低。描述如下: 我们在玩猜谜游戏。游戏如下:我从1到n中选择一个数字。你必须猜出我选择了哪个数字。每次你猜错了,我都会告诉你我选的数字是高于还是低于你的猜测。调用预定义的API int guess(int num),它返回三个可能的结果: -1: 您的猜测高于我选择的数字(即num 我的代码如下所示,Leetcode在提交时给了我“超出内存限制”的错误

  • 我正在开发一个Android应用程序,我想将输入过滤器设置为只允许EditText中包含21个字符。 我使用的XML代码片段如下 在活动中, 它不允许输入超过21个字符,但我无法告知用户长度不能超过21个字符,因为没有显示过滤器中的消息。 我尝试过使用,但它在第21个字符后没有被调用,因为我使用将限制设置为21。 任何人,请帮我找到解决办法。