YARN Fair Scheduler示例

时间:2020-01-09 10:34:32  来源:igfitidea点击:

这篇文章讨论了Hadoop中的Fair Scheduler,这是Hadoop框架中提供的可插拔调度程序。 FairScheduler允许YARN应用程序公平地共享大型集群中的资源。

YARN中的Fair Scheduler概述

公平调度是一种将资源分配给应用程序的方法,这样,群集上运行的所有应用程序随时间平均可获得平均资源份额。

由于资源是在公平调度程序中所有正在运行的应用程序之间共享的,因此,较短的应用程序可以在合理的时间内完成,而不会耗尽长期存在的应用程序。这也是在多个用户之间共享集群的一种合理方法。

关于YARN中的Fair Scheduler需要注意的两件事是-

  • 默认情况下,公平调度程序仅基于内存来调度公平决策。可以配置它与内存和CPU一起调度。

  • 调度程序将应用程序进一步组织到"队列"中,并在这些队列之间公平地共享资源。

例如–如果有两个队列,则是销售和财务。作业被提交到销售队列,它是唯一正在运行的作业,它将获得所有资源。现在将作业提交到财务队列,这将导致新作业逐渐获得一半的资源。因此,两个队列中的作业将各自拥有50%的资源。现在将另一个作业提交到财务队列,这将导致分配给财务队列的资源的一半分配给该新作业。因此,财务队列中的两个作业现在将按相等的比例共享分配给财务队列的资源(占总资源的50%),而销售队列中的作业将使用分配给销售队列的全部资源的50%。

分层队列支持

YARN中的公平调度程序支持分层队列,这意味着组织可以在其专用队列中创建子队列。
所有队列均来自名为" root"的队列。可用资源以典型的公平调度方式在根队列的子级之间分配。然后,孩子们以相同的方式将分配给他们的资源分配给他们的孩子。

Fair Scheduler的配置

要在YARN中使用公平调度程序,请首先在yarn-site.xml中分配适当的调度程序类:

<property>
  <name>yarn.resourcemanager.scheduler.class</name>
  <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>

设置队列

设置队列的属性如下。这些更改在配置文件etc / hadoop / fair-scheduler.xml中完成。

<queue>元素-表示队列。队列元素的一些重要属性如下。

  • minResources:队列有权使用的最小资源,形式为" X mb,Y vcores"。如果不满足队列的最小份额,则会在同一个父队列下的任何其他队列之前为它提供可用资源。

  • maxResources:分配队列的最大资源,以绝对值(X mb,Y vcores)或者集群资源的百分比(X%内存,Y%CPU)表示。

  • 权重:与其他队列不成比例地共享集群。权重默认为1,权重为2的队列所接收的资源大约是权重为默认队列的两倍。

  • schedulePolicy:设置任何队列的调度策略。允许的值为" fifo"," fair"," drf"或者任何扩展org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.SchedulingPolicy的类。默认为"公平"。

<defaultQueueSchedulingPolicy>元素设置队列的默认调度策略;如果指定,则由每个队列中的schedulePolicy元素覆盖。默认为"公平"。

<queueMaxAppsDefault> elementWhich设置队列的默认运行应用程序限制;在每个队列中被maxRunningApps元素覆盖。

<queuePlacementPolicy>元素–此元素包含规则元素的列表,这些规则元素告诉调度程序如何将传入的应用程序放入队列中。规则以列出顺序应用。所有规则都接受"创建"参数,该参数指示规则是否可以创建新队列。 "创建"默认为true;如果设置为false且该规则会将应用程序放置在分配文件中未配置的队列中,则我们继续执行下一条规则。

有效规则如下:

  • 指定:将应用程序放入请求的队列中。

  • 用户:将应用程序与提交用户的用户名放在一起放入队列中。

  • primaryGroup:将应用程序放入队列中,队列中包含提交该应用程序的用户的主要组的名称。

  • secondaryGroupExistingQueue:将应用程序放入一个队列中,该队列的名称与提交该应用程序的用户的次要组相匹配。

  • nestedUserQueue:将应用程序放入用户队列中,用户名位于嵌套规则建议的队列下。

  • default:将应用程序放入默认规则的" queue"属性中指定的队列中。如果未指定" queue"属性,则将应用程序放置在" root.default"队列中。

  • 拒绝:申请被拒绝。

队列配置示例

如果有两个顶级子队列销售和财务(从根开始降序)。在销售队列中,有两个子队列apac和emea,然后可以将队列设置为使用公平调度程序,如下所示:

<allocations>
  <queue name="sales">
    <minResources>10000 mb,0vcores</minResources>
    <maxResources>50000 mb,0vcores</maxResources>
    <weight>2.0</weight>
    <schedulingPolicy>fifo</schedulingPolicy>
    <queue name="emea" />
    <queue name="apac" />
  </queue>
  <queue name="finance">
    <minResources>10000 mb,0vcores</minResources>
    <maxResources>70000 mb,0vcores</maxResources>
    <weight>3.0</weight>
    <schedulingPolicy>fair</schedulingPolicy>
  </queue>
  <queuePlacementPolicy>
    <rule name="specified"   />
    <rule name="primaryGroup" create="false" />
    <rule name="default" queue="finance" />
  </queuePlacementPolicy>
</allocations>