如何使用Spark-Jobserver配置FAIR调度程序?

时间:2016-08-24 20:00:37

标签: spark-jobserver

当我同时发布作业服务器请求时,它们似乎总是以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>

感谢任何想法或指示。很抱歉与术语有任何混淆 - “job”这个词在jobserver中有两个含义。

1 个答案:

答案 0 :(得分: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调度程序。