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

Sha*_*hay 7 apache-spark spark-streaming

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

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

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

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

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

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

J M*_*rer 0

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