使用 YARN/Hadoop 调度,我可以只抢占某些队列吗?
With YARN/Hadoop scheduling, can I preempt only certain queues?
情况是我正在使用 YARN 来管理 运行 同时具有 Spark 和 Hadoop 的集群。通常作业没有相对大量的输入数据,但是有一系列 Hadoop MapReduce 作业偶尔会 运行 确实有大量的输入数据并且可以长时间占用集群,所以其他用户无法 运行 他们的小得多的工作。
我希望能够做的是在集群为空时将整个集群用于大量作业,但如果另一个用户提交了作业,我想使用 Preempt 调度功能来终止大型作业中的一些容器,因此它们可以腾出空间用于较小的作业。但是,我不希望任何其他作业被抢占,只有大量作业被抢占。
根据我的发现,似乎可以使用公平调度程序来执行此操作,为大量作业定义一个队列,并以某种方式仅在大量作业队列上启用抢占。
我想问任何使用过调度程序和队列的人,是否可以只抢占特定队列中的作业,如果可以,我如何为每个队列启用该功能?还是有 another/better 方法来实现我的目标?
是否可以仅抢占特定队列中的作业?
抢占是全局启用。一旦启用,它适用于所有队列。
("yarn.scheduler.fair.preemption"需要在yarn-site中设置为"true")
如何为每个队列启用该功能?
如上所述全局启用抢占,并设置合理的值 "minSharePreemptionTimeout" & "fairSharePreemptionTimeout"
在除执行大量作业的队列之外的所有队列的分配文件中。这样可以避免排队
其中包含来自其他队列的抢占作业的大量作业。在你的情况下,大多数工作都很小,所以大量的工作
仍然 运行,资源可能更少。同时,此设置将允许较小的作业抢占使用的容器
大量的工作。
同时考虑根据需要设置 yarn.scheduler.fair.preemption.cluster-utilization-threshold 和其他相关属性。
仔细看看https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/FairScheduler.html
希望这些信息能帮助您开始进一步探索。
情况是我正在使用 YARN 来管理 运行 同时具有 Spark 和 Hadoop 的集群。通常作业没有相对大量的输入数据,但是有一系列 Hadoop MapReduce 作业偶尔会 运行 确实有大量的输入数据并且可以长时间占用集群,所以其他用户无法 运行 他们的小得多的工作。
我希望能够做的是在集群为空时将整个集群用于大量作业,但如果另一个用户提交了作业,我想使用 Preempt 调度功能来终止大型作业中的一些容器,因此它们可以腾出空间用于较小的作业。但是,我不希望任何其他作业被抢占,只有大量作业被抢占。
根据我的发现,似乎可以使用公平调度程序来执行此操作,为大量作业定义一个队列,并以某种方式仅在大量作业队列上启用抢占。
我想问任何使用过调度程序和队列的人,是否可以只抢占特定队列中的作业,如果可以,我如何为每个队列启用该功能?还是有 another/better 方法来实现我的目标?
是否可以仅抢占特定队列中的作业? 抢占是全局启用。一旦启用,它适用于所有队列。 ("yarn.scheduler.fair.preemption"需要在yarn-site中设置为"true")
如何为每个队列启用该功能? 如上所述全局启用抢占,并设置合理的值 "minSharePreemptionTimeout" & "fairSharePreemptionTimeout" 在除执行大量作业的队列之外的所有队列的分配文件中。这样可以避免排队 其中包含来自其他队列的抢占作业的大量作业。在你的情况下,大多数工作都很小,所以大量的工作 仍然 运行,资源可能更少。同时,此设置将允许较小的作业抢占使用的容器 大量的工作。
同时考虑根据需要设置 yarn.scheduler.fair.preemption.cluster-utilization-threshold 和其他相关属性。
仔细看看https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/FairScheduler.html
希望这些信息能帮助您开始进一步探索。