【问题标题】:YARN minimum-user-limit-percent not working?YARN 最小用户限制百分比不起作用?
【发布时间】:2017-08-13 10:52:14
【问题描述】:

我在 YARN 中使用容量调度程序,我发现用户有可能通过使用属性“yarn minimum-user-limit-percent”来获得队列的最小百分比。我将此属性设置为 20,我希望资源将平均分配给最多 5 个用户,根据此:

https://docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.6.1/bk_yarn-resource-management/content/setting_user_limits.html

但当用户启动运行应用程序时,情况并非如此。例如,如果我在队列空闲时运行应用程序,YARN 会为该应用程序分配所有请求的资源。当另一个用户之后运行相同的应用程序时,YARN 分配的资源与队列中剩余的资源一样多,并且队列被填满。此时,我认为使用该属性,第二个用户将获得 50% 的队列,而第一个用户将拥有更少的资源。

如果第三个用户进来,我希望他/她获得 33% 的队列,但 YARN 甚至没有安排应用程序,因为没有可用资源了。

我错过了什么吗?我认为这个参数会提出独立于可用资源的请求,直到达到每个用户的最小百分比。

这是我的 yarn-site.xml 和 capacity-scheduler.xml:

  • yarn-site.xml

    <configuration>
      <property>
        <name>yarn.acl.enable</name>
        <value>true</value>
      </property>
      <property>
        <name>yarn.admin.acl</name>
        <value>*</value>
      </property>
      <property>
        <name>yarn.resourcemanager.address</name>
        <value>hadoopLogin:8032</value>
      </property>
      <property>
        <name>yarn.resourcemanager.admin.address</name>
        <value>hadoopLogin:8033</value>
      </property>
      <property>
        <name>yarn.resourcemanager.scheduler.address</name>
        <value>hadoopLogin:8030</value>
      </property>
      <property>
        <name>yarn.resourcemanager.resource-tracker.address</name>
        <value>hadoopLogin:8031</value>
      </property>
      <property>
        <name>yarn.resourcemanager.webapp.address</name>
        <value>hadoopLogin:8088</value>
      </property>
      <property>
        <name>yarn.resourcemanager.webapp.https.address</name>
        <value>hadoopLogin:8090</value>
      </property>
      <property>
        <name>yarn.resourcemanager.client.thread-count</name>
        <value>50</value>
      </property>
      <property>
        <name>yarn.resourcemanager.scheduler.client.thread-count</name>
        <value>50</value>
      </property>
      <property>
        <name>yarn.resourcemanager.admin.client.thread-count</name>
        <value>1</value>
      </property>
      <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>1024</value>
      </property>
      <property>
        <name>yarn.scheduler.increment-allocation-mb</name>
        <value>512</value>
      </property>
      <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>14336</value>
      </property>
      <property>
        <name>yarn.scheduler.minimum-allocation-vcores</name>
        <value>1</value>
      </property>
     <property>
        <name>yarn.scheduler.increment-allocation-vcores</name>
        <value>1</value>
      </property>
      <property>
        <name>yarn.scheduler.maximum-allocation-vcores</name>
        <value>32</value>
      </property>
      <property>
        <name>yarn.resourcemanager.amliveliness-monitor.interval-ms</name>
        <value>1000</value>
      </property>
      <property>
        <name>yarn.am.liveness-monitor.expiry-interval-ms</name>
        <value>600000</value>
      </property>
      <property>
        <name>yarn.resourcemanager.am.max-attempts</name>
        <value>2</value>
      </property>
      <property>
        <name>yarn.resourcemanager.container.liveness-monitor.interval-ms</name>
        <value>600000</value>
      </property>
      <property>
        <name>yarn.resourcemanager.nm.liveness-monitor.interval-ms</name>
        <value>1000</value>
      </property>
      <property>
        <name>yarn.nm.liveness-monitor.expiry-interval-ms</name>
        <value>600000</value>
      </property>
      <property>
        <name>yarn.resourcemanager.resource-tracker.client.thread-count</name>
        <value>50</value>
      </property>
      <property>
        <name>yarn.resourcemanager.scheduler.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
    

    yarn.scheduler.fair.user-as-default-queue 真的 yarn.scheduler.fair.preemption 错误的 yarn.scheduler.fair.sizebasedweight 错误的 yarn.scheduler.fair.assignmultiple 错误的 yarn.resourcemanager.max-completed-applications 10000 yarn.nodemanager.aux-services spark_shuffle yarn.nodemanager.aux-services.spark_shuffle.class org.apache.spark.network.yarn.YarnShuffleService

  • 容量调度程序.xml

    yarn.scheduler.capacity.root.queues 批处理,笔记本 控制台和批处理作业(batch)和笔记本作业(notebook)队列的定义

    yarn.scheduler.capacity.root.batch.capacity 50 root.batch 队列的容量百分比

    yarn.scheduler.capacity.root.notebook.capacity 50 root.notebook 队列的容量百分比

    yarn.scheduler.capacity.root.batch.maximum-capacity 55 root.batch 队列的最大容量百分比

    yarn.scheduler.capacity.root.notebook.maximum-capacity 55 root.notebook 队列的最大容量百分比

    yarn.scheduler.capacity.root.batch.state 跑步 root.batch 提示的当前状态

    yarn.scheduler.capacity.root.notebook.state 跑步 root.notebook 提示的当前状态

    yarn.scheduler.capacity.root.acl_submit_applications hadoop,yarn,mapred,hdfs,spark 谁可以向根队列提交作业的 ACL。

    yarn.scheduler.capacity.root.batch.acl_submit_applications scienceUser1 root,gaia,ub,ucm,uac,udc,esac,upo,une,inaf 谁可以将作业提交到 root.batch 队列的 ACL。

    yarn.scheduler.capacity.root.notebook.acl_submit_applications * 根、盖亚、ub、ucm、uac、udc、esac、upo、une、inaf 谁可以将作业提交到 root.notebook 队列的 ACL。

    yarn.scheduler.capacity.root.batch.acl_administer_queue 盖亚 谁可以将作业管理到 root.batch 队列的 ACL。

    yarn.scheduler.capacity.root.notebook.acl_administer_queue 盖亚 谁可以将作业管理到 root.notebook 队列的 ACL。

    yarn.scheduler.capacity.root.acl_administer_queue 盖亚 谁可以管理根队列上的作业的 ACL。

    yarn.scheduler.capacity.root.acl_administer_queue 盖亚 谁可以管理根队列上的作业的 ACL。

    yarn.scheduler.capacity.root.acl_administer_queue 盖亚 谁可以管理根队列上的作业的 ACL。

    yarn.scheduler.capacity.root.batch.acl_administer_queue 盖亚 谁可以管理批处理队列上的作业的 ACL。

    yarn.scheduler.capacity.root.notebook.acl_administer_queue 盖亚 谁可以管理笔记本队列上的作业的 ACL。

    yarn.scheduler.capacity.resource-calculator org.apache.hadoop.yarn.util.resource.DominantResourceCalculator

    yarn.scheduler.capacity.root.notebook.minimum-user-limit-percent 33 用户从队列中获得的资源的最小百分比。

【问题讨论】:

  • 请详细支持 Yarn 配置。 yarn-site.xml 和 capacity-schedule.xml

标签: hadoop apache-spark hadoop-yarn


【解决方案1】:

如果您没有启用抢占,您看到的行为是正确的。 在您的 yarn-site.xml 中查找 yarn.resourcemanager.scheduler.monitor.enable 等于 true 以查看您是否已启用它。

如果您尚未启用它,请参阅以下指南:

【讨论】:

  • 感谢@tk421 的回答!我尝试通过将 yarn.resourcemanager.scheduler.monitor.enable 设置为 true 来启用容器抢占,但行为仍然相同...我使用的是 hadoop 2.6.0,但在容量调度程序文档中没有看到容器抢占:@ 987654324@ 但他们确实提到了yarn.scheduler.capacity..minimum-user-limit-percent ....我错过了什么吗?谢谢!
  • 如果没有看到您的配置文件,我无法确定任何事情。你能用你的 yarn-site.xml 和 capacity-scheduler.xml 更新你的问题吗?
  • 再次感谢!我在问题中添加了我的 yarn-site.xml 和 capacity-scheduler.xml 文件。
  • 除了docs.hortonworks.com/HDPDocuments/HDP2/HDP-2.6.1/… 中提到的所有抢占设置之外,您的 yarn-site.xml 中仍然缺少 yarn.resourcemanager.scheduler.monitor.enable = true。
【解决方案2】:

实际上这不是最小用户限制的处理方式。假设您有 100 GB 并且有 4 个用户。公平地说,每个最高可达 25GB。但是如果明天你有 100 个用户进来怎么办?在这种情况下,平均分配最终会给每个用户 1GB。现在这是我们可能不希望发生的事情,考虑到每个进程最终都会缺乏资源并可能导致性能下降的情况。所以在这里我们通过将参数 minimum-user-limit 指定为 25% 来限制自己。这意味着每个用户可能会获得至少 25GB,如果有更多用户,它将进入接受状态。所以现在如果有 1 个用户进入,它可以增加到 100GB。 2 个用户每个最多可以占用 50GB。 3 个用户每个最多可以占用 33 GB,4 个用户每个最多可以占用 25 GB。但是如果第 5 个用户进来。第 5 个用户将被发送到等待,因为每个用户无法获得 20GB,因为我们将限制设置为 25%(of 100GB),即 25GB。 P.S这是我的理解。如果有人发现这是错误的,请发表评论。这确实有点令人困惑。 现在在您的场景中,假设前两个用户占用了全部资源。那个案例和这个不同。 25% 限制仅表示只有当您的 yarn 至少有 25% 可分配给您时,您才能进入。为了确保两个用户不占用全部资源,您可以使用 user-limit-factor 进行调整。如果设置为 .2 ,则每个用户不得超过 20%。

【讨论】:

    猜你喜欢
    • 2016-12-17
    • 2014-01-13
    • 1970-01-01
    • 2017-04-01
    • 1970-01-01
    • 2013-06-19
    • 2023-03-31
    • 2015-09-29
    相关资源
    最近更新 更多