【问题标题】:Yarn - How does yarn.scheduler.capacity.root.queue-name.maximum-capacity works?纱线 - yarn.scheduler.capacity.root.queue-name.maximum-capacity 是如何工作的?
【发布时间】:2019-10-22 19:46:58
【问题描述】:

我在根队列下有 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 属性设置了最大容量。

我的理解是,以上2个属性分别设置了绝对容量和绝对最大容量。这意味着队列流的 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%?

【问题讨论】:

    标签: hadoop-yarn capacity-planning


    【解决方案1】:

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

    Capacity Scheduler 配置文件示例,名为 capacity-scheduler.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>
    

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

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

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        【解决方案3】:

        我怀疑这里令人困惑的是.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

        【讨论】:

          猜你喜欢
          • 2018-07-18
          • 2020-10-11
          • 2020-09-30
          • 2019-07-13
          • 1970-01-01
          • 2021-03-26
          • 2021-06-03
          • 2020-08-21
          • 2017-12-25
          相关资源
          最近更新 更多