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

Ada*_*ker 6 hadoop hadoop-yarn

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

我发现此设置yarn.scheduler.capacity.maximum-applications限制了最大数量的应用程序,但它会影响提交和运行的应用程序(如文档中所述).我想将提交的应用程序保持在队列中,直到当前正在运行的应用程序未完成.如何才能做到这一点?

fra*_*ijo 5

1)将Scheduler更改为 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>
Run Code Online (Sandbox Code Playgroud)

2)设置default队列

Fair Scheduler为每个用户创建一个队列。IE,如果三个不同的用户提交作业,则将创建三个单独的队列,并且资源将在三个队列之间共享。通过在以下位置添加此属性来禁用它yarn-site.xml

<property>
  <name>yarn.scheduler.fair.user-as-default-queue</name>
  <value>false</value>
</property>
Run Code Online (Sandbox Code Playgroud)

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

3)限制最大申请

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

创建一个以命名的文件fair-scheduler.xml$HADOOP_CONF_DIR并添加以下条目

<allocations>
   <queueMaxAppsDefault>1</queueMaxAppsDefault>
</allocations>
Run Code Online (Sandbox Code Playgroud)

另外,将此属性添加到 yarn-site.xml

<property>
  <name>yarn.scheduler.fair.allocation.file</name>
  <value>$HADOOP_CONF_DIR/fair-scheduler.xml</value>
</property>
Run Code Online (Sandbox Code Playgroud)

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


提交多个应用程序时,该应用程序ACCEPTED将首先被视为活动应用程序,其余的将作为待处理应用程序排队。这些待处理的应用程序将继续保持ACCEPTED状态,直到该RUNNING应用程序处于FINISHED。活动应用程序将被允许利用所有可用资源。

参考: Hadoop:公平调度程序


Soh*_*ani 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>
Run Code Online (Sandbox Code Playgroud)