在 spark 中,我可以定义比可用内核更多的执行程序吗?

Posted

技术标签:

【中文标题】在 spark 中,我可以定义比可用内核更多的执行程序吗?【英文标题】:In spark, can I define more executors than available cores? 【发布时间】:2020-09-18 18:20:57 【问题描述】:

假设我总共有 4 个核心, 如果我将执行者的数量定义为 8 会发生什么.. 我们可以在 2 个执行者之间共享一个核心吗? executor的核数可以是分数吗?

这种配置对性能有什么影响。

【问题讨论】:

执行器的核心数可以是分数吗?不可能,也没有任何意义允许分数值。 如果我将执行程序的数量定义为 8 会发生什么...根据资源可用性启动执行程序并不重要...如果您使用任何 RM(如 yarn、Mesos),那么执行器根据集群的资源可用性启动。 在spark架构中,每个cpu核心都被认为是一个slot,每个task/executor会占用一个slot,一次处理一个partition.... core可以在executor之间共享还是不依赖于底层硬件架构。 (即,如果架构启用了超线程,那么内核显然是在进程之间共享的)....但是从 spark 的角度来看,没有这样的 conf 并且它不会以这种方式看到。 【参考方案1】:

这是我在 spark 独立模式下观察到的:

我系统的总核心数是 4

如果我使用 spark.executor.cores=2 执行 spark-shell 命令 然后将创建 2 个执行器,每个执行器有 2 个核心。

但如果我配置的执行器数量超过可用核心, 然后将只创建一个执行器,具有系统的最大核心。

核心的数量永远不会是分数。 如果你在配置中分配分数,你最终会出现异常:

如有任何错误,请随时编辑/更正帖子。

【讨论】:

以上是关于在 spark 中,我可以定义比可用内核更多的执行程序吗?的主要内容,如果未能解决你的问题,请参考以下文章

我的 spark 代码没有使用 Yarn aws EMR 中可用的所有执行器

如果分配更多内核,单个 Spark 任务会在计算上消耗更多时间

为啥 Spark Standalone 集群不使用所有可用的内核?

当有更多可用时,Spark 仅使用一台工作机器

Spark Dataframe Join shuffle

为啥 local[*] 不使用我机器中的所有可用内核? [复制]