如何configurationSpark和OpenMPI在集群上共存的优先级?

我们有一个运行Spark的小群集来执行面向公众的Web应用程序的作业。 这里使用Spark的目标是为Web应用程序提供一个高效的延迟,因此提交作业时,需要尽快从集群中进行响应。

但是大部分时间都是空闲的。 所以当需要的时候,Spark需要很快,但是当不需要的时候,我们想要使用这些计算资源。

例如,我们有一些模拟运行使用OpenMP进行本地线程和OpenMPI来在整个集群中分配处理。 这需要一些时间来运行,我们只想在Spark不需要的时候使用集群。

是否有可能configurationSpark具有非常高的优先级和淘汰或饿死其他程序? 从Spark的configuration中,我可以看到有关限制内存和内核使用的几个选项,但与赋予Spark更高的优先级没有多大关系。

我们正在考虑使用Torque来控制OpenMPI模拟的作业队列。 我们正在考虑在Docker容器中运行它们,以便更新它们,因为它们正在开发中。 这个想法是发出一个Torque命令,它将基本上拖动一个Docker镜像,在每台机器上启动它,并触发OpenMPI应用程序。 这太复杂吗? 任何其他build议? 我们可以放弃Torque并直接使用Spark来控制OpenMPI作业吗? 如果一个Spark工作具有更高的优先级,可以打断另一个工作吗

目前一切正在运行在Fedora上。

TL;博士

更大的问题在于,如何在群集上启动长时间运行的计算密集型分布式作业,同时仍然能够确保在同一硬件上共存的Spark实例的良好延迟?

**这篇文章可能会背叛我对Spark的相对陌生。

请注意,默认情况下,火花从属尝试使用它所在节点的所有资源 – 所以你的问题主要是如何降低节点中其他进程的优先级。

一个自动的解决scheme是使用漂亮的Linux命令 – 但它可能太简化取决于你的群集configuration(给予比你机器上的其他资源更高的优先级)。

另一种方法是实现您的自定义行为,这一切都取决于您如何部署spark,您使用的集群pipe理器以及集群中其他服务的性质。

举个例子 – 如果你使用docker swarm作为你的集群pipe理器和火花站一起使用,一个简单的方法就是完成这个任务:让spark slave启动并运行(当它们闲置时,它们不会占用很多资源),同时还有更多的服务相同的节点。 当工作到达时,您可以将火花从属节点上的所有其他服务缩小。 这可以正常工作,如果你的其他服务可以被closures和…

如果你使用Mesos作为你的集群pipe理器 – 你可以使用相同的技巧,你也可以实现自己的mesos调度器或分配器

顺便说一句 – 另外一个简单的解决办法是只分配独特的资源来触发。 我想你已经想过了,但我希望你再想一想:-)。 这样您就可以预测集群中所有其他服务的SLA。

希望这可以帮助。