【问题标题】:With YARN/Hadoop scheduling, can I preempt only certain queues?使用 YARN/Hadoop 调度,我可以只抢占某些队列吗?
【发布时间】:2016-05-02 12:41:36
【问题描述】:

情况是我正在使用 YARN 来管理同时运行 Spark 和 Hadoop 的集群。通常作业没有相对大量的输入数据,但是有一系列 Hadoop MapReduce 作业偶尔运行,它们确实有大量输入数据,并且可以长时间占用集群,因此其他用户无法使用运行他们的小得多的工作。

我希望能够在集群为空时将整个集群用于大规模作业,但如果另一个用户提交作业,我想使用抢占调度功能来杀死一些大型工作中的容器,因此它们可以腾出时间来完成较小的工作。但是,我不希望任何其他工作被抢占,只希望大规模工作。

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

对于使用过调度程序和队列的任何人,我的问题是,是否可以仅从特定队列中抢占作业,如果可以,如何为每个队列启用该功能?还是有另一种/更好的方法来实现我所追求的?

【问题讨论】:

    标签: hadoop mapreduce hadoop-yarn


    【解决方案1】:

    是否可以只从特定队列中抢占作业? 抢占是一种全局支持。一旦启用,它适用于所有队列。 (“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

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

    【讨论】:

    • 感谢您的回答。如果我为除大型作业队列之外的所有队列定义“minSharePreemptionTimeout”和“fairSharePreemptionTimeout”值,大型作业不会抢占任何其他队列,但其他队列会相互抢占吗?现在,除了庞大的作业队列之外,我们正在为所有用户使用默认的 root.username 队列。我们是否需要在结构 root.smalljobs.username 和 root.massivejob 中才能工作?
    • @codesmaller: 1. 你是对的。如果其他队列没有获得公平的集群资源份额,则它们会相互抢占。 2. 不需要更改队列名称层次结构。一般来说,请采用试错法,直到找到最佳解决方案。
    • @codesmaller:这是一个公平的调度程序。在分配集群资源时符合道德要求的最低程度的公平性。或者,您也可以尝试容量调度程序。它具有队列弹性功能。 hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/…
    • @codesmaller:队列弹性功能可用于长时间运行的作业。您可以限制运行较小作业的队列的容量。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-15
    • 2018-09-16
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 2020-10-08
    相关资源
    最近更新 更多