繁体   English   中英

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

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

我的问题:在 YARN master 中运行 Apache Spark 应用程序,将部署模式作为客户端或集群,执行程序核心是否应该始终设置为 1?

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

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

那么,我们真的应该只使用 1 作为 executor-cores 吗?

如果执行器使用 1 个核心,它们不是单线程的吗?

亲切的问候,

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

ApplicationMaster 负责从 ResourceManager 协商资源,并与 NodeManager 一起执行和监控容器及其资源消耗。 如果我们在纱线上运行火花,那么我们需要对 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 吞吐量)

可用执行器的数量 =(总核心数/每个执行器的核心数)= 2600/5 = 520

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

请注意:这只是一个示例推荐配置,您可能希望根据应用程序的性能进行修改。

另外一个更好的做法是在执行作业时监视节点资源,这可以更好地了解集群中的资源利用率

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM