【发布时间】:2019-01-24 04:07:46
【问题描述】:
我很困惑我应该使用哪种方法来配置 spark 应用程序参数。
让我们考虑以下集群配置:10 个节点,每个节点 16 个内核和每个节点 64GB RAM(示例来自 https://spoddutur.github.io/spark-notes/distribution_of_executors_cores_and_memory_for_spark_application.html0
- 根据上述建议,让我们分配
5 core per executors => --executor-cores = 5(以获得良好的 HDFS 吞吐量) - 留
1 core per node用于 Hadoop/Yarn 守护进程 => 每个节点可用的核心数 = 16-1 = 15。因此,集群中可用的核心总数 = 15 x 10 = 150 - 可用执行器数 =(总核心数/每个执行器的核心数)= 150/5 = 30
- 为 ApplicationManager 留下 1 个执行程序 =>
--num-executors = 29 - 每个节点的执行器数 = 30/10 = 3
- 每个执行程序的内存 = 64GB/3 = 21GB
- 计算堆开销 = 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,然后我们从每个节点 6 *24=144 中减去 1 个核心,则我们得到 144/4= 26 个执行器。在为 AM ==> --num-executors = 25 留出了 1 个核心之后。现在如果我们要计算每个节点的执行者数量 = 25/6 = WHATTTT?我的错误在哪里?
【问题讨论】:
标签: apache-spark pyspark