我需要在hadoop集群中禁用YARN应用程序的并行执行。现在,YARN具有默认设置,因此可以并行运行多个作业。我认为没有这方面的优点,因为这两个工作都运行得很慢。
我发现此设置yarn.scheduler.capacity.maximum-applications
限制了应用程序的最大数量,但它会影响已提交和正在运行的应用程序(如文档中所述)。我希望将提交的应用程序保持在队列中,直到当前正在运行的应用程序未完成。怎么办呢?
答案 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应用程序将被允许使用所有可用资源。
答案 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>