使用YARN / Hadoop调度,我可以只抢占某些队列吗?

时间:2016-01-26 01:27:02

标签: hadoop mapreduce yarn

情况是我使用YARN来管理运行Spark和Hadoop的集群。通常情况下,作业没有相对较大的输入数据,但有一系列Hadoop MapReduce作业偶尔会运行,这些作业会有大量的输入数据并且可以长时间占用集群,因此其他用户可以& #39;他们的工作量要小得多。

我希望能够做的是在群集为空时将整个群集用于大量作业,但如果其他用户提交作业,我想使用Preempt schedule功能在大规模的工作中杀死一些容器,所以他们可以腾出更小的工作。但是,我不希望任何其他工作被抢占,只有大量的工作。

从我发现的情况来看,似乎可以使用公平调度程序来执行此操作,为大量作业定义队列,并以某种方式仅在大量作业队列上启用抢占。

对于使用调度程序和队列的任何人,我的问题是,是否可以只从特定队列中抢占作业,如果是,我如何为每个队列启用该功能?或者是否有其他/更好的方式来实现我之后的目标?

1 个答案:

答案 0 :(得分:2)

是否可以只从特定队列中抢占作业? 抢占是全球的支撑。启用后,它适用于所有队列。 (" yarn.scheduler.fair.preemption"需要设置为" true"在纱线网站中)

如何为每个队列启用该功能? 如上所述,全局启用抢占,并将合理的值设置为" minSharePreemptionTimeout" &安培; " fairSharePreemptionTimeout" 在除了执行大量作业的队列之外的所有队列的分配文件中。这将阻止队列 其中包含从其他队列抢占工作的大量工作。在你的情况下,大多数工作都是小的,所以大量的工作 仍然会运行可能较少的资源。与此同时,此设置将允许较小的作业抢占使用的容器 通过大规模的工作。

还可以考虑根据需要设置yarn.scheduler.fair.preemption.cluster-utilization-threshold和其他相关属性。

仔细查看https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/FairScheduler.html

希望这些信息可以帮助您进一步探索。