首页 > 解决方案 > Apache Spark 中的执行器和核心

问题描述

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

请先用以下条款验证我:

执行者:container or JVM process它将在worker node or data node. 每个节点可以有多个 Executor。

核心:它是一个container or JVM process运行在worker node or data node. 每个执行程序可以有多个核心或线程。

如果以上两个概念有误,请纠正我。

问题:

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

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

那么这些执行器+核心的数量将在每个节点上设置吗?如果没有,那么我们如何设置每个节点的特定核心数?

标签: javaapache-sparkcluster-computinghadoop-yarn

解决方案


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

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

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

我希望它有帮助!


推荐阅读