我的问题:在 YARN master 中运行 Apache Spark 应用程序,将部署模式作为客户端或集群,执行器核心是否应始终设置为 1?
我正在运行一个应用程序,在集群上处理数百万个数据,其中200 data nodes
每个数据都有14 cores
.当我在 YARN 上使用2 executor-cores
和150 executors
时,它运行完美,但其中一位集群管理员要求我使用 1 个执行器核心。他坚持认为 YARN 中的 Spark 应该与 1 个执行器核心一起使用,否则它将窃取其他用户的资源。他向我指出了 Apache 文档上的这个页面,其中说 YARN 的执行器核心的默认值为 1。
https://spark.apache.org/docs/latest/configuration.html
那么,我们真的应该只使用 1 作为执行器核心吗?
如果执行程序使用 1 个内核,它们不是单线程的吗?
亲切问候
当我们使用像 Yarn 这样的集群管理器运行 Spark 应用程序时,会有几个守护进程在后台运行,如 NameNode、Secondary NameNode、DataNode、JobTracker 和 TaskTracker。因此,在指定 num-executor 时,我们需要确保留出足够的内核(每个节点 ~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
为应用程序管理器保留 1 个执行器 => --num-executors= 519
请注意:这只是一个示例推荐配置,您 可能希望根据您的应用程序的性能进行修改。
此外,更好的做法是在 执行您的作业,这样可以更好地了解资源 集群中的利用率