我试图了解在 YARN 上运行 Spark 作业时内核数量和执行程序数量之间的关系。
测试环境如下:
该作业使用以下配置运行:
--master yarn-client --executor-memory 19G --executor-cores 7 --num-executors 3
(每个数据节点的执行器,使用与核心一样多) --master yarn-client --executor-memory 19G --executor-cores 4 --num-executors 3
(减少的核心数)--master yarn-client --executor-memory 4G --executor-cores 2 --num-executors 12
(更少的内核,更多的执行器) 耗时:
令我惊讶的是,(3)要快得多。
我认为(1)会更快,因为改组时执行者之间的通信会更少。
尽管 (1) 的内核数少于 (3),但内核数不是关键因素,因为 2) 确实表现良好。
(在 pwilmot 的回答之后添加了以下内容。)
信息,性能监视器屏幕截图如下:
该图大致分为 2 个部分:
如图所示,(1) 可以使用尽可能多的 CPU 功率。所以,这可能不是线程数量的问题。
如何解释这个结果?
最佳答案
Cloudera 的博客 How-to: Tune Your Apache Spark Jobs (Part 2) 中的一篇文章给出了解释。
关于hadoop - Apache Spark : The number of cores vs. 执行器数量,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24622108/