当我同时发布jobserver请求时,它们似乎总是以FIFO模式进行处理。尽管我尽了最大的努力来启用公平调度程序,但这还是存在的。如何确保始终并行处理我的请求?
背景:在我的集群上,有一个SparkContext,用户可以向它发送请求来处理数据。每个请求可以作用于不同的数据块,但操作总是相同的。一分钟的小作业不应该等待一小时的大作业完成。
直觉上,我预计会发生以下情况(参见下面的配置):上下文在公平的池中运行。每次用户发送处理某些数据的请求时,Spark都应该拆分公平池,并提供一部分集群资源来处理新的请求。然后,每个请求都以FIFO模式与任何其他并发请求并行运行。
下面是我同时运行作业时实际发生的情况:界面显示"1 Fair Scheduler Pools“,并列出一个名为”default“的活动(FIFO)池。似乎所有的东西都在相同的FIFO池中执行,而FIFO池本身在公平池中单独运行。我可以在Spark的Environment页面上看到我的公平池详细信息被正确加载,但我的请求都是以FIFO方式处理的。
如何配置我的环境/应用程序,以使每个请求实际上与其他请求并行运行?我是否需要为每个请求创建单独的上下文?我是否可以在公平池中创建任意数量的相同FIFO池,然后在每次发出请求时以某种方式选择一个空池?考虑到J观察者的目标,似乎这一切都应该是自动的,并且设置起来并不是很复杂。下面是我的配置的一些细节,以防我犯了一个简单的错误。
来自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中有两层含义。
发布于 2016-08-25 10:52:11
我查看了我的配置,发现
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是否使用了公平调度程序。
https://stackoverflow.com/questions/39132097
复制相似问题