当我同时发布作业服务器请求时,它们似乎总是以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中有两个含义。
答案 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调度程序。