cpu核心可以在spark集群上同时运行多个应用程序吗?

时间:2015-04-09 14:51:16

标签: apache-spark

我有两个关于Apache spark的问题。

  1. 我构建了一个spark独立集群,每个worker有4个内核,这是否意味着我最多只能有4个应用程序同时运行在一个worker上?

  2. 我有一个流程,我希望它定期运行,最佳做法是什么?在cron作业中调用spark-submit或者只是在驱动程序中循环我的代码?

2 个答案:

答案 0 :(得分:2)

来自Learning Spark, Chapter 7 p. 132

  

“在多个应用程序之间共享Spark群集时,您将会   需要决定如何在执行者之间分配资源。该   独立集群管理器具有允许的基本调度策略   限制每个应用程序的使用,以便可以运行多个应用程序   同时。 Apache Mesos支持更多动态共享   应用程序正在运行,而YARN具有允许的队列概念   你可以限制各种应用程序的使用。“

因此,这应该可以帮助您2.作者还有各种要点可帮助您确定使用哪个集群管理器(第138-139页)。一般来说,本书第7章非常宝贵,我强烈建议购买(Databricks有促销代码)。

关于问题1,您可以通过设置以下内容来配置资源分配:(1)执行程序内存和(2)最大总核心数。听起来您已经设置了最大内核数,因此请考虑执行程序内存。每个应用程序都有一个执行程序(并且只有你允许的内存)。每个核心可以有多个执行程序。

您可以转到http://masternode:8080来验证独立模式的这些设置。

答案 1 :(得分:1)

This page似乎提供了一个答案,不符合我的直觉或期望:

  

独立群集模式目前仅支持跨应用程序的简单FIFO调度程序。但是,要允许多个并发用户,您可以控制每个应用程序将使用的最大资源数。默认情况下,它将获取群集中的所有核心,这只有在您一次只运行一个应用程序时才有意义。您可以通过在SparkConf中设置spark.cores.max来限制核心数量

我从中收集的是,确实,一个进程将完全锁定已分配给它的CPU核心,直到它完成运行。 在您的情况下,您确实可以为每个进程分配1个核心,但其他进程显然会被放入队列中,直到核心释放为止。

关于你的第二个问题:我会避免让一个应用程序运行并永远循环,因为这会阻止它放弃对它正在使用的CPU核心的控制。以cron工作方式开始它会阻止这种类型的CPU占用。