Hadoop纱线容器没有分配足够的空间

Hadoop纱线容器没有分配足够的空间,hadoop,Hadoop,我正在运行Hadoop作业,在我的warn-site.xml文件中,我有以下配置: <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>2048</value> </property> <property> <name>ya

我正在运行Hadoop作业,在我的warn-site.xml文件中,我有以下配置:

    <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)对应用程序进行探查,然后查看内存的使用位置。这可以给你很好的洞察力

您能否用上面的示例解释一下“纱线.调度器.最大分配mb”“纱线.调度器.最小分配vcores”“mapreduce.task.timeout”“mapreduce.task.io.sort.mb”应该是什么
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.