我使用 AWS EMR 来运行带有 1 个主节点实例 (m6g.xlarge) 和 1 个从节点实例 (m6g.2xlarge) 的 Spark。 m6g.2xlarge 有 8 个 vCpu,默认 cpu 核心。
我正在使用以下配置运行 Spark。
--executor-memory 6g --executor-cores 3 --num-executors 2
据我所知,理想情况下,集群中的核心总数为 8 个。我的配置所需的核心总数为
3x2 = 6
。因此集群管理器最多应添加 2 个执行程序。留下 2 个核心用于守护进程。
但是我看到的是 3 个执行程序被添加到总核心数
3x3=9
,这怎么可能?
看起来您对这里的“核心”这个名字有点困惑。 物理核心和“执行器核心”之间没有严格的依赖关系。
简单来说,在Spark术语中,“执行器”指的是JVM,“核心”指的是JVM内部的线程。显然,您可以拥有比物理核心更多的线程,因此您的场景中没有任何错误(或意外)。
顺便说一句,在 Databricks 中,为了避免这种混淆,建议教师使用术语“线程”或“槽”而不是“核心”。