--master local[n] 和 --total-executor-core = n (Spark Standalone) 有什么区别?

What is the difference between --master local[n] and --total-executor-core = n (Spark Standalone)?

我有一个 4 个节点的 Spark Standalone 集群,每个节点有 56 个核心

当我 运行 与 --master local[56]master --spark://... --executor-cores 56 --total-executor-cores 56 的工作相同时(我认为它们是相同的)

我发现他们的表现不一样,而后者表现更好。这2种spark-submit有什么区别?

What is the difference between these 2 kinds of spark-submit?

--master local[56] 为执行程序使用具有 56 个线程的单个 JVM。

--master spark://... 使用一个 Spark Standalone 集群,它可能是也可能不是 运行 在你执行 spark-submit 的同一台机器上。该集群可能有也可能没有多个分布式节点,每个节点有一个或多个 CPUs.

--total-executor-cores NUM 是所有执行器的总核心数。它没有说明您为单个 Spark 应用程序获得了多少个执行程序(节点)。可能是一个,但也可能是几十个或更多(每个 CPU 数量未知)。您所知道的是此 Spark 应用程序的 CPU 个内核总数。

--executor-cores NUM 是每个执行器的核心数。 (默认值:独立模式下 worker 上的所有可用内核)。

最后一个选项要求解释执行者和工人之间的区别。

执行器是由工作程序托管的 JVM 进程。执行者负责执行代表您的 Spark 应用程序的任务。 Worker 是 Spark Standalone 集群的一部分。

你可能有 10 个执行者和 1 个工人,或者 1 个执行者和 10 个工人。在整个 Spark Standalone 集群中可用的 20 CPU 个内核中,也可以为您的 Spark 应用程序提供 10 CPU 个内核。这是为了让其他 Spark 应用程序 spark-submit 加入集群以分担工作量。


有人会问:

So according to this seems as if --total-executor-cores is equal to --executor-cores, then we could just have 1 executor, thus only one node would be activated for the Spark jobs

--total-executor-cores 是每个 Spark 应用程序的 总数 个 CPU 核心数,而 --executor-cores 是每个 Spark 应用程序的 CPU 个核心数一个 Spark 应用程序的执行者。

换句话说,--total-executor-cores 通常大于 --executor-cores,但它们也可以相同(例如,只有一个工人和一个执行者)。