Apache Spark 中的执行器和核心

Executors and cores in Apache Spark

我对 Spark 有点陌生,并试图理解几个术语。 (无法理解使用在线资源)

请先用以下条款验证我:

执行者:其 container or JVM process 将在 worker node or data node 上 运行。每个节点可以有多个执行器。

核心:它是 worker node or data nodecontainer or JVM process 运行 中的一个线程。每个执行器可以有多个内核或线程。

以上两个概念如有错误请指正

问题:

  1. 当我们提交 spark 作业时,这意味着什么?我们在交 将我们的工作交给 Yarn 或资源管理器,后者将分配 集群中我的 application or job 的资源并执行它? 它的正确理解.. ?
  2. 在spark集群提交作业的命令中,有一个选项 设置执行者数量。

    spark-submit --class <CLASS_NAME> --num-executors ? --executor-cores ? --executor-memory ? ....

所以这些执行器 + 内核的数量将按节点设置?如果不是那么我们如何设置每个节点的具体内核数?

你所有的假设都是正确的。有关集群架构的详细说明,请查看 this link。你会得到一个清晰的画面。关于你的第二个问题,num-of-executors 是针对整个集群的。计算如下:

num-cores-per-node * total-nodes-in-cluster

例如,假设你有一个20节点的集群,4核机器,你提交了一个应用-executor-memory 1G和--total-executor-cores 8。然后Spark会启动8个executor ,每个都有 1 GB 的 RAM,在不同的机器上。 Spark 默认这样做是为了让应用程序有机会在同一台机器(例如 HDFS)上实现分布式文件系统 运行 的数据局部性,因为这些系统通常将数据分布在所有节点上。

希望对您有所帮助!