Apache spark cpu核心能否在spark群集上并发运行多个应用程序?

Apache spark cpu核心能否在spark群集上并发运行多个应用程序?,apache-spark,Apache Spark,关于ApacheSpark,我有两个问题 我构建了一个spark独立集群,每个worker有4个核心,这是否意味着一个worker最多只能有4个应用程序并发运行 我有一个流程,我希望它能定期运行,最佳实践是什么?在cron作业中调用spark submit,还是在驱动程序中循环我的代码 似乎提供了一个不符合我直觉或期望的答案: 独立群集模式目前仅支持跨应用程序的简单FIFO调度程序。但是,要允许多个并发用户,您可以控制每个应用程序将使用的最大资源数。默认情况下,它将获取集群中的所有核心,这只有在

关于ApacheSpark,我有两个问题

  • 我构建了一个spark独立集群,每个worker有4个核心,这是否意味着一个worker最多只能有4个应用程序并发运行

  • 我有一个流程,我希望它能定期运行,最佳实践是什么?在cron作业中调用
    spark submit
    ,还是在驱动程序中循环我的代码

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

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

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

    关于您的第二个问题:我将避免让单个应用程序永远运行和循环,因为这将防止它放弃对其使用的CPU核心的控制。以cron作业方式启动它将防止这种CPU占用。

    来自:

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

    所以,这应该对你有帮助。在第138-139页上,作者还有许多要点可以帮助您决定使用哪个群集管理器。总的来说,这本书的第7章是非常宝贵的,我强烈推荐购买(Databricks有一个促销代码)

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


    您可以通过转到来验证单机模式的这些设置。

    谢谢,Michael,我也阅读了文档,这就是为什么我对它感到困惑的原因,b/c它看起来好像单机模式只能按顺序(FIFO)执行作业。关于(2),您是否会使用另一个群集管理器,还是只链接Spark jobs?您好,@Myles,我仍在为我们的应用程序寻找解决方案,因此如果独立模式无法满足我们的要求,我将尝试使用Thread或Mesos。