apache-spark - Spark 性能调优 - 执行器数量与核心数量

标签 apache-spark spark-streaming

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

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

    • 执行器数量 * 执行器核心数量应 <= 分区数量。也就是说,一个分区始终在一个执行器的一个核心中处理。执行器*核心数多于分区数是没有意义的
  2. 我知道每个执行器拥有大量核心会对 HDFS 写入等内容产生影响,但这是我的第二个问题,纯粹从数据处理的角度来看,两者之间有什么区别?例如如果我有 10 个节点的集群,这两个作业之间有什么区别(假设每个节点有足够的内存来处理所有内容):

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

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

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

最佳答案

大多数时候,使用更大的执行器(更多内存、更多核心)会更好。一:具有大内存的更大执行器可以轻松支持广播连接并消除洗牌。其次:由于任务创建时并不相同,因此统计上较大的执行器更有可能避免 OOM 问题。 大型执行器的唯一问题是 GC 暂停。 G1GC 有帮助。

关于apache-spark - Spark 性能调优 - 执行器数量与核心数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39006025/

相关文章:

scala - 如何使用 `ssc.fileStream()` 读取 Parquet 文件?传递给 `ssc.fileStream()` 的类型是什么?

scala - 无法在已停止的 SparkContext 上调用方法

apache-spark - 在 Spark SQL 中使用 collect_list 和 collect_set

python - getBatch 从 MQTTTextStreamSource 返回的 DataFrame 没有 isStreaming=true

apache-spark - 对象 ml 不是包 org.apache.spark 的成员

csv - 尝试通过spark-sql查询csv格式配置单元表时出现问题。有人可以解释原因吗?

scala - 使用 Spark StreamingContext 从 Kafka 主题消费

scala - 无法在foreachRDD中序列化SparkContext

scala - 在 Sbt 中包含 Spark 包

scala - 在没有笛卡尔的情况下,在 Spark 和 Scala 的帮助下 RDD 的 Jaccard 相似度?