`yarn.scheduler.maximum-allocation-mb` 和 `yarn.nodemanager.resource.memory-mb` 之间的区别?

Difference between `yarn.scheduler.maximum-allocation-mb` and `yarn.nodemanager.resource.memory-mb`?

yarn.scheduler.maximum-allocation-mbyarn.nodemanager.resource.memory-mb有什么区别?

我在 yarn-site.xml 中看到了这两个,并且我看到了解释 here

yarn.scheduler.maximum-allocation-mb 给出以下定义:RM 上每个容器请求的最大分配,以 MB 为单位。高于此值的内存请求将抛出 InvalidResourceRequestException。 这是否意味着仅在资源管理器上的内存请求受此值限制?

并且 yarn.nodemanager.resource.memory-mb 给出了 可以分配给容器的物理内存量的定义,以 MB 为单位。 这是否意味着所有容器的总量整个集群,加在一起?

然而,我还是分不清这些。这些解释让我觉得他们是一样的。

更令人困惑的是,它们的默认值完全相同:8192 mb。我如何分辨它们之间的区别?谢谢。

考虑这样一个场景,您正在设置一个集群,其中每台机器都有 48 GB 的 RAM。应为操作系统和其他已安装的应用程序保留部分 RAM。


yarn.nodemanager.resource.memory-mb:

可以为容器分配的物理内存量(以 MB 为单位)。这意味着 YARN 可以在此节点 上使用 的内存量,因此 属性 应该低于该机器的总内存

<name>yarn.nodemanager.resource.memory-mb</name>
<value>40960</value> <!-- 40 GB -->

下一步是提供有关如何将可用的总资源分解为容器的 YARN 指南。您可以通过指定为容器分配的最小 RAM 单位来执行此操作。

yarn-site.xml

<name>yarn.scheduler.minimum-allocation-mb</name> <!-- RAM-per-container ->
 <value>2048</value>

yarn.scheduler.maximum-分配-mb:

它定义了容器可用的最大内存分配 MB

这意味着 RM 只能以 "yarn.scheduler.minimum-allocation-mb" 的增量向容器分配内存,并且不能超过 "yarn.scheduler.maximum-allocation-mb" 并且它不应该超过节点的总分配内存。

yarn-site.xml

<name>yarn.scheduler.maximum-allocation-mb</name> <!-Max RAM-per-container->
 <value>8192</value>

对于 MapReduce 应用程序,YARN 在一个容器中处理每个 map 或 reduce 任务,并且在一台机器上可以有多个容器。 我们希望每个节点上最多允许 20 个容器,因此需要(40 GB 总 RAM)/(20 个容器)= 每个由 属性 yarn.scheduler.minimum-allocation-mb[= 控制的容器最少 2GB 21=]

我们再次要限制由 属性 "yarn.scheduler.maximum-allocation-mb"

控制的容器的最大内存利用率

例如,如果一个作业要求每个映射容器 (mapreduce.map.memory.mb=2048 set in mapred-site.xml) 2049 MB 内存,RM 将给它一个 4096 MB(2*yarn.scheduler.minimum-allocation-mb) 容器。

如果您有一个要求 9999 MB 地图容器的巨大 MR 作业,该作业将被终止并显示错误消息。