6

我在根队列下有 4 个队列,配置如下。

|-------------|-----------------|---------------------|-------------------|
| Queue Name  | Capacity (in %) | Max Capacity (in %) | User Limit Factor |
|-------------|-----------------|---------------------|-------------------|
| default     | 10              | 30                  | 10                |
|-------------|-----------------|---------------------|-------------------|
| thriftsvr   | 5               | 30                  | 10                |
|-------------|-----------------|---------------------|-------------------|
| stream      | 70              | 70                  | 10                |
|-------------|-----------------|---------------------|-------------------|
| batch       | 15              | 30                  | 10                |
|-------------|-----------------|---------------------|-------------------|

我已经按属性设置了容量yarn.scheduler.capacity.root.<queue-name>.capacity和最大容量yarn.scheduler.capacity.root.<queue-name>.maximum-capacity

我的理解是,以上两个属性分别设置了绝对容量和绝对最大容量。这意味着队列流的 100% 等于集群总容量的 70%,它最多可以填充队列容量的 100%,也就是集群总容量的 70%。

现在,问题是当队列“流”被填满 66.4%(即当已用容量:66.4% 和绝对已用容量:46.5%)时,新作业进入挂起状态,通过说在队列“流”中提交“等待 AM 容器被分配、启动并注册到 RM”。

当我在 yarn UI 上检查队列配置时,它显示 Configured Max Capacity: 70.0% & Absolute Configured Max Capacity: 70.0% 但根据配置,队列“流”可以填充到 Used Capacity: 100% & Absolute Used Capacity: 70% 在此处输入图像描述

任何想法,为什么新作业无法利用队列流的容量直到 100%?

4

3 回答 3

4

我怀疑这里令人困惑的是,.capacity属性.maximum-capacity都可以定义为

  • 相对于父队列root的百分比(作为浮点数,例如12.5
  • 绝对资源值(使用资源值语法,例如[memory=204800,vcores=122]

如果您还有其他问题,请务必提出。

如需完整参考,请阅读文档:https ://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html#Queue_Properties

于 2019-11-19T15:03:27.733 回答
1

我将从本书中举一个例子来解释yarn.scheduler.capacity.root.queue-name.maximum-capacity 的工作原理。

一个示例容量调度程序配置文件,称为容量调度程序.xml。它在根队列下定义了两个队列,prod 和 dev,分别拥有 40% 和 60% 的容量。请注意,通过设置 yarn.scheduler.capacity.. 形式的配置属性来配置特定队列,其中是队列的分层(虚线)路径,例如 root.prod。

    <?xml version="1.0"?>
<configuration>
  <property>
    <name>yarn.scheduler.capacity.root.queues</name>
    <value>prod,dev</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.queues</name>
    <value>eng,science</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.prod.capacity</name>
    <value>40</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.capacity</name>
    <value>60</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
    <value>75</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.eng.capacity</name>
    <value>50</value>
  </property>
  <property>
    <name>yarn.scheduler.capacity.root.dev.science.capacity</name>
    <value>50</value>
  </property>
</configuration>

如您所见,dev 队列进一步分为容量相等的 eng 和 science 队列。为了让 dev 队列在 prod 队列空闲时不会用完所有集群资源,它的最大容量设置为 75%。换句话说,prod 队列始终有 25% 的集群可供立即使用。由于没有为其他队列设置最大容量,因此 eng 或 science 队列中的作业可以使用 dev 队列的所有容量(最多 75% 的集群),或者实际上 prod 队列可以使用整个集群.

请参阅YARN 文档以了解有关队列配置的更多信息。

于 2020-03-13T09:36:36.280 回答
0

https://docs.aws.amazon.com/emr/latest/ManagementGuide/emr-plan-instances-guidelines.html

根据上述链接,AWS 从 EMR 版本 6 及更高版本开始删除了这些标签。

因此,这适用于大于 6 的 EMR,但对于较低版本,删除核心标签可能会有所帮助。

于 2021-07-23T13:40:31.370 回答