Apache Spark 的 executor core 数量在 YARN 模式下是否应该设置为 1?

Should the number of executor core for Apache Spark be set to 1 in YARN mode?

我的问题:运行 YARN master 中的 Apache Spark 应用程序,部署模式为客户端或集群,executor-cores 是否应始终设置为 1?

我是 运行 一个在集群上处理数百万数据的应用程序,每个集群有 200 data nodes14 cores。当我在 YARN 上使用 2 executor-cores150 executors 时它运行完美,但其中一位集群管理员要求我使用 1 个执行程序核心。他坚持认为 YARN 中的 Spark 应该与 1 个执行器核心一起使用,否则它会从其他用户那里窃取资源。他向我指出了 Apache 文档上的这个页面,其中说 executor-core 的默认值对于 YARN 是 1。

https://spark.apache.org/docs/latest/configuration.html

那么,我们真的应该只使用 1 个执行器核心吗?

如果执行者使用1核,他们不是单线程的吗?

亲切的问候,

当我们 运行 使用像 Yarn 这样的集群管理器启动应用程序时,会有几个守护进程 运行 在后台运行,例如 NameNode、Secondary NameNode、DataNode、JobTracker 和 TaskTracker。因此,在指定 num-executors 时,我们需要确保为这些守护进程留出足够的核心(每个节点约 1 个核心)以 运行 顺利进行。

ApplicationMaster 负责从 ResourceManager 协商资源,并与 NodeManager 一起执行和监控容器及其资源消耗。如果我们 运行ning spark on yarn,那么我们需要预算 AM 需要的资源

Example 
**Cluster Config:**
200 Nodes
14 cores per Node

每个节点为 Hadoop/Yarn 守护程序保留 1 个核心 => 每个节点可用的核心数 = 14-1 = 13 因此,集群中可用的内核总数 = 13 x 200 = 2600

让我们为每个执行程序分配 5 个核心 => --executor-cores = 5(为了获得良好的 HDFS 吞吐量)

可用执行器数量 =(总计 cores/num-cores-per-executor)= 2600/5 = 520

为 ApplicationManager 保留 1 个执行程序 => --num-executors = 519

Please note : This is just a sample recommended configuration , you may wish to revise based upon the performance of your application.

Also A better practice is to monitor the node resources while you execute your job , this gives a better picture of the resource utilisation in your cluster