Hadoop纱线容器没有分配足够的空间
我正在运行Hadoop作业,在我的warn-site.xml文件中,我有以下配置:Hadoop纱线容器没有分配足够的空间,hadoop,Hadoop,我正在运行Hadoop作业,在我的warn-site.xml文件中,我有以下配置: <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> </property> <property> <name>ya
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>4096</value>
</property>
我发现,通过增加warn.scheduler.minimum-allocation-mb,为容器分配的物理内存会增加。然而,我并不总是希望为我的容器分配4GB,我认为通过明确指定最大大小,我就能够解决这个问题。我意识到Hadoop无法在映射程序运行之前计算出它需要为容器分配多少内存,因此,只有当容器需要额外内存时,我应该如何为容器分配更多内存?您还应该为MapReduce正确配置内存分配。发件人: [……] 对于我们的示例集群,我们有一个容器的最小RAM (Thread.scheduler.minimum allocation mb)=2 GB。因此,我们将分配4GB 用于映射任务容器,8 GB用于Reduce任务容器 在mapred-site.xml中:
mapreduce.map.memory.mb
:4096
mapreduce.reduce.memory.mb
:8192
每个容器都将为Map和Reduce任务运行JVM。JVM
堆大小应设置为低于映射并减少内存
定义,以便它们位于容器的边界内
由纱线分配的内存
在mapred-site.xml中:
mapreduce.map.java.opts
:-Xmx3072m
mapreduce.reduce.java.opts
:-Xmx6144m
上述设置配置所需物理RAM的上限
映射和减少任务将使用
最后,中的某个人也有同样的问题,在他们的情况下,结果证明他们的代码中有内存泄漏。如果上述任何配置都没有帮助的话。如果问题与mapper内存有关,我想建议检查以下几件事
- 检查合路器是否启用?如果是,则意味着必须对所有记录(映射器的输出)运行reduce逻辑这在内存中发生。根据您的应用程序,您需要检查启用组合器是否有帮助。在网络传输字节和所用时间/内存/CPU之间进行权衡,以减少“X”记录数上的逻辑。
- 如果您觉得合并器没有多大价值,只需禁用它
- 如果您需要合并器,并且“X”是一个巨大的数字(比如数百万条记录),那么请考虑更改拆分逻辑(对于默认输入格式,使用较少的块大小,通常为1块大小=1个拆分),以将较少的记录映射到单个映射器
- 在单个映射程序中处理的记录数。请记住,所有这些记录都需要在内存中进行排序(映射器的输出已排序)。考虑在需要时设置<强> MapReduce。Toop.Io.Real.Mb(默认为200 MB)到更高的值。李>
- 如果以上任何一项都没有帮助,请尝试将映射器逻辑作为独立应用程序运行,并使用探查器(如JProfiler)对应用程序进行探查,然后查看内存的使用位置。这可以给你很好的洞察力
Container [pid=63375,containerID=container_1388158490598_0001_01_000003] is running beyond physical memory limits. Current usage: 2.0 GB of 2 GB physical memory used; 2.8 GB of 4.2 GB virtual memory used. Killing container.