我对应该使用哪种方法配置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
=>每个节点可用的核心数量= 16-1 =15。因此,群集中可用的核心总数= 15 x 10 = 150 --num-executors = 29
--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?我的错误在哪里?
答案 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个)。