对于 YARN 中的单个队列,如何将 state=RUNNING 中的 spark 应用程序数量限制为 1?

Posted

技术标签:

【中文标题】对于 YARN 中的单个队列,如何将 state=RUNNING 中的 spark 应用程序数量限制为 1?【英文标题】:How do I limit the number of spark applications in state=RUNNING to 1 for a single queue in YARN? 【发布时间】:2017-03-03 06:18:25 【问题描述】:

我有多个 spark 工作。通常我将我的 spark 作业提交给 yarn,我有一个选项是 --yarn_queue,它告诉它要进入哪个纱线队列。

但是,这些作业似乎在同一个队列中并行运行。有时,一个 spark 作业的结果是下一个 spark 作业的输入。如何按顺序而不是在同一个队列中并行运行我的 spark 作业?

我查看了容量调度程序的this 页面。但我能看到的最接近的是属性yarn.scheduler.capacity.<queue>.maximum-applications。但这仅设置了可以同时处于 PENDING 和 RUNNING 状态的应用程序的数量。我对设置可以处于 RUNNING 状态的应用程序数量感兴趣,但我不在乎处于 PENDING (或 ACCEPTED 是同一件事)的应用程序总数。

对于单个队列,如何将 state=RUNNING 中的应用程序数量限制为 1?

【问题讨论】:

【参考方案1】:

您可以在容量调度程序配置中管理适当的队列一次运行一项任务。我建议为此目的使用 ambari。如果您没有这样的机会,请申请guide的指示

【讨论】:

我只需要使用yarn。您知道实现此目的的方法吗?我不知道哪个设置会影响这个。谢谢。【参考方案2】:

来自https://hadoop.apache.org/docs/current/hadoop-yarn/hadoop-yarn-site/FairScheduler.html

Fair Scheduler 默认允许所有应用程序运行,但也可以通过配置文件限制每个用户和每个队列运行的应用程序数量。当用户必须一次提交数百个应用程序时,这可能很有用,或者如果一次运行太多应用程序会导致创建过多的中间数据或过多的上下文切换,通常可以提高性能。限制应用不会导致任何后续提交的应用失败,只会在调度程序的队列中等待,直到用户早期的一些应用完成。

具体需要配置:

maxRunningApps: limit the number of apps from the queue to run at once

例如

<?xml version="1.0"?>
<allocations>
    <queue name="sample_queue">
      <maxRunningApps>1</maxRunningApps>
      <other options>
     </queue>
</allocations>

【讨论】:

那么,如果设置如上所示,这是否意味着即使我通过pyspark 启动 spark 上下文,它也不会让任何其他 spark 应用程序在该特定队列中运行?

以上是关于对于 YARN 中的单个队列,如何将 state=RUNNING 中的 spark 应用程序数量限制为 1?的主要内容,如果未能解决你的问题,请参考以下文章

大数据平台 CDP 中如何配置 hive 作业的 YARN 队列以确保SLA?

大数据平台 CDP 中如何配置 hive 作业的 YARN 队列以确保SLA?

Hadoop-yarn组件的三种调度器

如何使用 Yarn 定位单个工作区?

Yarn 队列设置

YARN Capacity Scheduler(容量调度器)