Spark 独立集群如何在工作节点上管理多个执行程序?

Posted

技术标签:

【中文标题】Spark 独立集群如何在工作节点上管理多个执行程序?【英文标题】:How multiple executors are managed on the worker nodes with a Spark standalone cluster? 【发布时间】:2019-01-25 11:26:55 【问题描述】:

到目前为止,我只在 Hadoop 集群上使用了 Spark,并使用 YARN 作为资源管理器。在那种类型的集群中,我确切地知道要运行多少个执行程序以及资源管理是如何工作的。但是,知道我正在尝试使用独立的 Spark 集群,我有点困惑。纠正我的错误。

从this article开始,默认情况下,一个工作节点使用该节点的所有内存减去1 GB。但我知道通过使用SPARK_WORKER_MEMORY,我们可以使用更少的内存。例如,如果节点的总内存是 32 GB,但我指定 16 GB,Spark worker 不会在该节点上使用超过 16 GB 的内存?

但是执行者呢?假设我想为每个节点运行 2 个执行程序,我可以通过在 spark-submit 期间将执行程序内存指定为 SPARK_WORKER_MEMORY 的一半来做到这一点,如果我想每个节点运行 4 个执行程序,通过指定执行程序内存为SPARK_WORKER_MEMORY的四分之一?

如果是这样,我认为除了执行器内存之外,我还必须正确指定执行器核心。例如,如果我想在一个 worker 上运行 4 个执行器,我必须将执行器核心指定为 SPARK_WORKER_CORES 的四分之一?如果我指定一个更大的数字会发生什么?我的意思是如果我指定执行器内存为SPARK_WORKER_MEMORY 的四分之一,但执行器核心仅为SPARK_WORKER_CORES 的一半?在这种情况下,我会在该节点上运行 2 或 4 个执行程序吗?

【问题讨论】:

你能检查一下可接受的答案是否仍然有意义 【参考方案1】:

根据我的经验,这是控制执行器、内核和内存数量的最佳方式。

核心:您可以设置所有执行器的核心总数和每个执行器的核心数

内存:单独的执行器内存

--total-executor-cores 12 --executor-cores 2 --executor-memory 6G

这将为您提供 6 个执行程序和每个执行程序 2 个核心/6G,因此您总共看到 12 个核心和 36G

您可以使用

设置驱动程序内存

--驱动内存2G

【讨论】:

谁说不能指定执行者的数量?因为我总是使用 --num-executors 和 spark-submit 来做这件事。 我已经尝试过 --num-executors 6 和 executors cores 3。我们有一个有 6 个节点和每个 12 个核心的集群,当我启动一个作业时,我最终得到了 23 个 3 个核心的执行器,不'看起来没有意义。 @MetallicPriest 我可以从另一个帖子中确认同样的情况,***.com/questions/39399205/… 检查你的事实【参考方案2】:

所以,我自己对 Spark Standalone 集群进行了一些试验,这就是我注意到的。

    我的直觉是,可以通过调整执行器核心来在工作人员内部运行多个执行器,这确实是正确的。假设您的工人有 16 个核心。现在,如果您为执行程序指定 8 个核心,Spark 将为每个工作人员运行 2 个执行程序。

    在一个工作器中运行多少个执行器还取决于您指定的执行器内存。例如,如果工作程序内存为 24 GB,并且您希望每个工作程序运行 2 个执行程序,则不能将执行程序内存指定为超过 12 GB。

    通过指定可选参数--memory 的值或更改SPARK_WORKER_MEMORY 的值,可以在启动从属服务器时限制工作人员的内存。与核心数相同(--cores/SPARK_WORKER_CORES)。

如果您希望能够在独立 Spark 集群上运行多个作业,您可以在执行 spark-submit 时使用 spark.cores.max 配置属性。例如,像这样。

spark-submit <other parameters> --conf="spark.cores.max=16" <other parameters>

因此,如果您的独立 Spark 集群总共允许 64 个内核,而您只为程序提供 16 个内核,则其他 Spark 作业可以使用剩余的 48 个内核。

【讨论】:

看看我在上面的评论,它没有按预期工作,我可以从另一个 *** 帖子中确认。 感谢@skjagini 指出。我已经相应地更新了我的答案。

以上是关于Spark 独立集群如何在工作节点上管理多个执行程序?的主要内容,如果未能解决你的问题,请参考以下文章

Spark 在具有多个应用程序的工作人员上运行了多少 JVM

多节点火花集群上的 spark-shell 无法在远程工作节点上旋转执行程序

在集群上运行Spark

04Spark

如何在多个机器上搭建celery的集群环境

以独立模式在主节点上启动多个工作程序