哪个是配置spark应用程序参数的最佳策略?

时间:2019-01-24 04:07:46

标签: apache-spark pyspark

我对应该使用哪种方法配置spark应用程序参数感到困惑。

让我们考虑以下群集配置:10个节点,每个节点16个核心,每个节点64GB RAM(示例来自https://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.html0

  1. 根据上述建议,让我们分配5 core per executors => --executor-cores = 5(以获得良好的HDFS吞吐量)
  2. 为Hadoop / Yarn守护程序保留1 core per node =>每个节点可用的核心数量= 16-1 =15。因此,群集中可用的核心总数= 15 x 10 = 150
  3. 可用执行程序的数量=(每个执行程序的总核心数/每执行程序的核心数)= 150/5 = 30
  4. 为ApplicationManager留下1个执行者=> --num-executors = 29
  5. 每个节点的执行者数量= 30/10 = 3
  6. 每个执行者的内存= 64GB / 3 = 21GB
  7. 计算堆开销= 21GB的7%= 3GB。因此,实际的--executor-memory = 21 - 3 = 18GB

因此,建议的配置为: 29个执行程序,每个执行器18GB内存,每个5个内核

请考虑另一个示例,其中群集配置为:6个节点,25个核心节点和每个节点125 GB的内存(示例来自https://researchcomputing.princeton.edu/computational-hardware/hadoop/spark-memory

推荐的配置是; -num-executors 30 --executor-cores 4 --executor-memory 24G。

问题:如果我们使用示例1中应用的规则并计算示例2中的推荐配置,结果将大不相同。实际上,如果我们--executor-cores = 4,然后从每个节点中减去1个核心6 * 24 = 144,则得到144/4 = 26个执行程序。在为AM ==> --num-executors = 25留下1个内核之后。现在,如果我们要计算每个节点的执行程序数量= 25/6 = WHATTTT?我的错误在哪里?

1 个答案:

答案 0 :(得分:1)

具有6个节点,25个核心节点和125 GB, 如果细分为每个执行者4个核心,而每个节点1个核心。那么6 * 24 = 144(考虑了总核数)。 144/4 =“ 36”执行器而不是“ 26”。如果您遗漏了“ 1”执行器,那么它将是“ 35”。 因此,对于每个节点(Node1到Node5 =“ 6”执行程序+ Node6 =“ 5”执行程序+ 1(我们省略了它),或者其他任何节点都携带5个执行程序,其余6个)。