Spark jobserver 如何使用Spark Jobserver配置公平调度程序?

Spark jobserver 如何使用Spark Jobserver配置公平调度程序?,spark-jobserver,Spark Jobserver,当我同时发布jobserver请求时,它们似乎总是以FIFO模式处理。这是尽管我尽了最大努力,使公平调度。我如何确保我的请求总是并行处理 背景:在我的集群中,有一个SparkContext,用户可以向其中发送处理数据的请求。每个请求可能作用于不同的数据块,但操作总是相同的。一个小的一分钟工作不应该等待一个大的一小时工作完成 直觉上,我预计会发生以下情况(请参阅下面的配置): 上下文在公平池中运行。每次用户发送处理某些数据的请求时,Spark都应该将公平池分割开来,并提供一部分集群资源来处理该新请

当我同时发布jobserver请求时,它们似乎总是以FIFO模式处理。这是尽管我尽了最大努力,使公平调度。我如何确保我的请求总是并行处理

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

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

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

我如何配置我的环境/应用程序,使每个请求实际上与其他请求并行运行?我是否需要为每个请求创建单独的上下文?我是否在公平池中创建任意数量的相同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>

公平的
1.

谢谢你的建议。很抱歉对术语造成混淆-job一词在jobserver中有两种含义

我在查看我的配置时发现

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 scheduler。

感谢您指出缺少的时段。改变了这一点,公平池开始出现在用户界面上。但是,作业仍在默认池中运行。关键的变化是在我的scala代码中添加了
sc.setLocalProperty(“spark.scheduler.pool”、“fair\u pool”)
。我认为这可以在我的Jobserver配置文件中指定-显然不是@格雷厄姆,你能制造一个问题吗@宙斯