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 nodes
个 14 cores
。当我在 YARN 上使用 2 executor-cores
和 150 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
我的问题:运行 YARN master 中的 Apache Spark 应用程序,部署模式为客户端或集群,executor-cores 是否应始终设置为 1?
我是 运行 一个在集群上处理数百万数据的应用程序,每个集群有 200 data nodes
个 14 cores
。当我在 YARN 上使用 2 executor-cores
和 150 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