当我同时发布作业服务器请求时,它们似乎总是以 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>
感谢您的任何想法或指示。很抱歉与术语混淆 - “工作”一词在工作服务器中有两个含义。