如何在YARN中配置垄断FIFO应用队列?

时间:2017-03-29 15:38:45

标签: hadoop yarn

我需要在hadoop集群中禁用YARN应用程序的并行执行。现在,YARN具有默认设置,因此可以并行运行多个作业。我认为没有这方面的优点,因为这两个工作都运行得很慢。

我发现此设置yarn.scheduler.capacity.maximum-applications限制了应用程序的最大数量,但它会影响已提交和正在运行的应用程序(如文档中所述)。我希望将提交的应用程序保持在队列中,直到当前正在运行的应用程序未完成。怎么办呢?

2 个答案:

答案 0 :(得分:5)

1)将计划程序更改为FairScheduler

Hadoop发行版默认使用CapacityScheduler(Cloudera使用FairScheduler作为默认调度程序)。将此属性添加到yarn-site.xml

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

2)设置default队列

Fair Scheduler为每个用户创建一个队列。 I.E.,如果三个不同的用户提交作业,则将创建三个单独的队列,并且将在三个队列之间共享资源。通过在yarn-site.xml

中添加此属性来禁用它
<property>
  <name>yarn.scheduler.fair.user-as-default-queue</name>
  <value>false</value>
</property>

这可确保所有作业都进入一个 default 队列。

3)限制最高申请数

现在,作业队列已限制为一个default队列。将可以在该队列中运行的最大应用程序数限制为 1

fair-scheduler.xml下创建一个名为$HADOOP_CONF_DIR的文件,并添加这些条目

<allocations>
   <queueMaxAppsDefault>1</queueMaxAppsDefault>
</allocations>

另外,在yarn-site.xml

中添加此属性
<property>
  <name>yarn.scheduler.fair.allocation.file</name>
  <value>$HADOOP_CONF_DIR/fair-scheduler.xml</value>
</property>

添加这些属性后重新启动YARN服务。

在提交多个应用程序时,首先将应用程序ACCEPTED视为活动应用程序,其余应用程序将排队等待应用程序。在ACCEPTED应用程序RUNNING之前,这些待处理的应用程序将继续处于FINISHED状态。 Active应用程序将被允许使用所有可用资源。

参考: Hadoop: Fair Scheduler

答案 1 :(得分:1)

根据我对你的问题的理解。我明白了,上面的代码行/设置可能对你没有帮助。您可以使用现有设置检查以下代码,它可能会为您提供一些解决方案。

<allocations>
  <defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>

  <queue name="<<Your Queue Name>>"
    <weight>40</weight>
    <schedulingPolicy>fifo</schedulingPolicy>
  </queue>

  <queue name=<<Your Queue Name>>>
    <weight>60</weight>
    <queue name=<<Your Queue Name>> />
    <queue name=<<Your Queue Name>> />
  </queue>

  <queuePlacementPolicy>
    <rule name="specified" create="false" />
    <rule name="primaryGroup" create="false" />
    <rule name="default" queue=<<Your Queue Name>> />
  </queuePlacementPolicy>
</allocations>