【问题标题】:Spark performance tuning - number of executors vs number for coresSpark 性能调整 - 执行器数量与核心数量
【发布时间】:2016-12-24 15:58:55
【问题描述】:

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

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

    • # of executors * # of executor cores 应该
  2. 我知道每个执行程序拥有大量内核可能会对 HDFS 写入等内容产生 -ve 影响,但这是我的第二个问题,纯粹从数据处理的角度来看,两者之间有什么区别?例如如果我有 10 个节点的集群,这两个作业之间会有什么区别(假设每个节点有足够的内存来处理所有内容):

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

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

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

【问题讨论】:

    标签: apache-spark spark-streaming


    【解决方案1】:

    大多数情况下,使用更大的执行器(更多内存、更多内核)会更好。一:大内存大executor可以轻松支持broadcast joins,取消shuffle。第二:由于任务不是平等的,统计上更大的执行者有更好的机会解决 OOM 问题。 大型执行程序的唯一问题是 GC 暂停。 G1GC 有帮助。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

      • 执行者数量多于节点数量是个好主意吗?如果每个执行器在节点上没有使用足够的 CPU/内存,那么每个执行器拥有更多内核不是更好吗?
      猜你喜欢
      • 2018-06-02
      • 1970-01-01
      • 2017-04-26
      • 1970-01-01
      • 2014-08-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多