Spark 应用程序的执行器如何分布在集群的节点上?假设 Spark 以集群模式运行,YARN 作为管理器。据说该集群有 6 个节点,每个节点 16 个核心,内存为 64GB。通过以下配置,执行器如何分布在集群中:
--num-executors 10 --executor-cores 4 --executor-memory 16G
首先需要澄清术语
节点 - 是物理机,例如
r6g.2xlarge
在 AWS 中
spark 执行器 - 是您通过 Spark 配置设置的虚拟机
核心 - 是最小的计算单元
spark 执行器配置(
--executor-cores
、--executor-memory
)不能超过物理节点规格,例如如果您的物理节点只有 --executor-cores 32
核心,则无法指定
16
随您配置
--num-executors 10 --executor-cores 4 --executor-memory 16G
您将得到 10 个执行器,每个执行器有 4 个核心和 16G 内存
这意味着对于 1 个核心 - 您分配 4GB 内存
您总共将拥有 4 * 10 = 40 个核心
当您提交 Spark 作业时 - 执行 dag 被构建。它分为工作、阶段、任务。
1 个任务将由 1 个执行器核心运行
假设您在 Spark 中有下一个代码
spark.read.parquet(...).repartition(200).write.mode(override).parquet(...)
重新分区后,Stage 中将有 200 个任务
您有 40 个可用核心,可以并行运行这 200 个任务
如果分区分布相同且物理机相同,我们可以预期每个核心将依次执行 5 个任务