繁体   English   中英

Spark 性能调优 - 执行器数量与内核数量

[英]Spark performance tuning - number of executors vs number for cores

我有两个关于 Spark 性能调优的问题:

  1. 我理解在 Spark 作业中控制并行性的关键之一是正在处理的 RDD 中存在的分区数量,然后控制处理这些分区的执行程序和内核。 我可以假设这是真的吗:

    • # of executors * # of executor cores 应该 <= # of partitions。 即说一个分区总是在一个执行器的一个核心中处理。 执行程序*核心数比分区数多没有意义
  2. 我知道每个执行程序拥有大量内核会对 HDFS 写入之类的事情产生 -ve 影响,但这是我的第二个问题,纯粹从数据处理的角度来看,两者之间有什么区别? 例如,如果我有 10 个节点集群,这两个作业之间的区别是什么(假设每个节点有足够的内存来处理所有内容):

    1. 5 个执行器 * 2 个执行器核心

    2. 2 个执行器 * 5 个执行器核心

    假设有无限的内存和 CPU,从性能的角度来看,我们是否应该期望上述两者的性能相同?

大多数情况下,使用更大的执行器(更多内存、更多内核)会更好。 一:大内存的大执行器可以轻松支持广播连接,摆脱shuffle。 第二:由于任务不是平等的,统计上较大的执行者有更好的机会在 OOM 问题中幸存下来。 大型执行程序的唯一问题是 GC 暂停。 G1GC 有帮助。

根据我的经验,如果我有一个包含 10 个节点的集群,我会选择 20 个 spark 执行程序。 作业的细节很重要,因此一些测试将有助于确定可选配置。

暂无
暂无

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

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