2

当我同时发布作业服务器请求时,它们似乎总是以 FIFO 模式处理。尽管我尽最大努力启用 FAIR 调度程序。如何确保始终并行处理我的请求?

背景:在我的集群上,有一个 SparkContext,用户可以向其发布请求以处理数据。每个请求可能作用于不同的数据块,但操作始终相同。一分钟的小工作不必等待一小时的大工作完成。

直觉上,我预计会发生以下情况(请参阅下面的配置):上下文在 FAIR 池中运行。每次用户发送处理某些数据的请求时,Spark 都应该拆分公平池并提供一小部分集群资源来处理该新请求。然后每个请求以 FIFO 模式运行,与任何其他并发请求并行。

以下是我同时运行作业时实际发生的情况:界面显示“1 Fair Scheduler Pools”,并列出了一个名为“default”的活动 (FIFO) 池。似乎一切都在同一个 FIFO 池中执行,该池本身在 FAIR 池中单独运行。我可以看到我的公平池详细信息已在 Spark 的环境页面上正确加载,但我的请求都以 FIFO 方式处理。

如何配置我的环境/应用程序,以便每个请求实际上与其他请求并行运行?我是否需要为每个请求创建单独的上下文?我是否在我的 FAIR 池中创建任意数量的相同 FIFO 池,然后每次发出请求时以某种方式选择一个空池?考虑到 Jobserver 的目标,似乎这一切都应该是自动的,而且设置起来并不复杂。以下是我的配置中的一些细节,以防我犯了一个简单的错误。

来自 local.conf:

contexts {
 mycontext {
   spark.scheduler.mode = FAIR
   spark.scheduler.allocation file = /home/spark/job-server-1.6.0/scheduler.xml
   spark.scheduler.pool = fair_pool
 }
}

从 scheduler.xml:

<?xml version="1.0"?>
<allocations>
  <pool name="fair_pool">
    <schedulingMode>FAIR</schedulingMode>
    <weight>1</weight>
  </pool>
</allocations>

感谢您的任何想法或指示。很抱歉与术语混淆 - “工作”一词在工作服务器中有两个含义。

4

1 回答 1

1

我正在查看我的配置,发现

spark.scheduler.allocation 文件应该是 spark.scheduler.allocation.file

并且所有值都被引用为

contexts {
  mycontext {
    spark.scheduler.mode = "FAIR"
    spark.scheduler.allocation.file = "/home/spark/job-server-1.6.0/scheduler.xml"
    spark.scheduler.pool = "fair_pool"
  }
}

还要确保创建了 mycontext 并且您在提交作业时传递了 mycontext。

您还可以使用 Spark Master UI 验证 mycontext 是否正在使用 FAIR 调度程序。

于 2016-08-25T02:52:11.440 回答