我有一个 Spark 独立集群,有 4 个节点,每个节点有 56 个核心
当我用--master local[56]
和master --spark://... --executor-cores 56 --total-executor-cores 56
运行相同的工作时(我认为这是相同的(
我发现他们的表现不同,而后者的表现更好。这两种spark-submit
有什么区别?
这两种火花提交有什么区别?
--master local[56]
使用具有 56 个线程的单个 JVM 作为执行程序。
--master spark://...
使用 Spark 独立群集,该群集可能在执行spark-submit
的同一台计算机上运行,也可能不在运行。该群集可能有多个分布式节点,也可能没有,每个节点都有一个或多个 CPU。
--total-executor-cores NUM
用于所有执行程序的总核心数。它没有说明单个 Spark 应用程序获得多少个执行程序(节点(。它可能是一个,但也可以是数十个或更多(每个都有未知数量的 CPU(。您知道的是此 Spark 应用程序的 CPU 内核总数。
--executor-cores NUM
表示每个执行程序的核心数。(默认值:独立模式下辅助角色上的所有可用内核(。
最后一个选项需要解释执行者和工作人员之间的区别。
执行程序是由工作线程托管的 JVM 进程。执行程序负责执行代表 Spark 应用程序的任务。辅助角色是 Spark 独立群集的一部分。
您可能有 10 个执行人和 1 个工作人员,或者 1 个执行人和 10 个工作人员。在整个 Spark 独立群集中可用的 20 个 CPU 内核中,也可以为 Spark 应用程序提供 10 个 CPU 内核。这是为了让其他 Spark 应用程序spark-submit
到群集以共享工作负载。
有人可能会问:
所以根据这似乎
--total-executor-cores
等于--executor-cores
,那么我们可以只有 1 个执行器,因此只会为 Spark 作业激活一个节点
--total-executor-cores
是每个 Spark 应用程序的 CPU 内核总数,而--executor-cores
是 Spark 应用程序的每个执行程序的 CPU 内核数。
换句话说,--total-executor-cores
通常大于--executor-cores
,但它们也可能是相同的(例如,只有一个工作线程和一个执行者(。