hadoop - 如何配置Spark和OpenMPI集群共存的优先级?

标签 hadoop apache-spark docker cluster-computing openmpi

我们有一个运行 Spark 的小型集群,用于从面向公众的 Web 应用程序执行作业。此处使用 Spark 的目的是为 Web 应用程序提供高效的延迟,因此当提交作业时,它需要集群尽快做出响应。

不管它有多少时间是空闲的。因此,在需要时,Spark 需要快速,但在不需要时,我们希望以其他方式使用这些计算资源。

例如,我们要运行一些模拟,使用 OpenMP 进行本地线程处理,使用 OpenMPI 在集群中分配处理。这些需要一些时间来运行,我们希望仅在 Spark 不需要时才使用集群。

是否可以将 Spark 配置为具有非常高的优先级并淘汰或饿死其他程序?来自 Spark 的 configuration我看到了几个关于限制内存和内核使用的选项,但与给予 Spark 更高的优先级没有太大关系。

我们正在考虑使用 Torque控制 OpenMPI 模拟的作业队列。我们正在考虑在 Docker 容器中运行它们,以便在开发过程中轻松更新它们。这个想法是发出一个 Torque 命令,该命令基本上会拉取 Docker 镜像,在每台机器上启动它,并触发 OpenMPI 应用程序。这也太绕了吧?还有其他建议吗?我们可以放弃 Torque 并直接使用 Spark 来控制 OpenMPI 作业吗?如果一个 Spark 作业具有更高的优先级,它可以中断另一个作业吗?

目前一切都在 Fedora 上运行。

tl;dr

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

** 这篇文章可能暴露了我对 Spark 的相对不熟悉。

最佳答案

请注意,默认情况下,spark slave 会尝试使用它所在节点的所有资源 - 因此您的问题主要是关于如何降低节点中其他进程的优先级。

一个自动解决方案是使用很好的 Linux 命令 - 但它可能过于简单,具体取决于您的集群配置(给 spark 比机器上其他资源更高的优先级)。

另一种方法是实现您的自定义行为,这完全取决于您部署 spark 的方式、您使用的集群管理器以及集群中其他服务的性质。

例如 - 如果您使用 docker swarm 作为您的集群管理器并单独使用 spark,一种简单的方法可以实现此目的: 让 spark slaves 启动并运行(它们在空闲时不使用很多资源)以及相同节点上的更多服务。 当一个工作到达 spark 时——你可以缩小 spark 从属节点上的所有其他服务。如果您的其他服务可以关闭和启动,这将很好地工作...

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

顺便说一句 - 另一个简单的解决方案是只分配独特的资源来激发 Spark 。我猜你已经考虑过了,但我敦促你再考虑一下 :-)。这样,您也可以预测集群中所有其他服务的 SLA。

希望这对您有所帮助。

关于hadoop - 如何配置Spark和OpenMPI集群共存的优先级?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39045934/

相关文章:

php - docker |管道失败 ubuntu 源列表

java - 为什么我无法运行hadoop jar文件,每次运行它时都说未找到类itemclick.itemclick.ItemClick?

hadoop - 纱:运行yarn-env.sh给出错误

unix - 实现单词计数示例并出现以下错误

Docker 用于非代码部署?

json - Kubernetes:从j2模板动态创建配置json文件

hadoop - 您如何处理 Apache Pig 中的空输入文件或丢失的输入文件?

hadoop - 基于时间的目录结构Apache Drill

apache-spark - Pyspark 数据帧 : how to apply scipy. 按组优化功能

scala - 具有 SASL_SSL 身份验证的 Kafka Spark 结构化流