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

Posted

技术标签:

【中文标题】配置 spark 应用程序参数的最佳策略是啥?【英文标题】:which is the best startegy to configure the spark application parameters?配置 spark 应用程序参数的最佳策略是什么? 【发布时间】: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?我的错误在哪里?

【问题讨论】:

【参考方案1】:

有 6 个节点、25 个核心节点和 125 GB, 如果分解是每个执行程序“4”个核心,每个节点留下“1”个核心。然后 6 * 24 = 144(考虑的总核心数)。 144/4 =“36”执行者不是“26”。如果您遗漏“1”执行者,那么它将是“35”。 所以对于每个节点(Node1 to Node5 = "6" executor + Node6 = "5" executor + 1(我们把它省略了)或任何其他节点都带有 5 个 executor,剩下 6 个)这样..

【讨论】:

但他们推荐 3o 执行器,这很混乱 您可以参考blog.cloudera.com/blog/2015/03/…,您所指的文章对cloudera post做指导。如果每个节点有 25 个核心,则每个节点为系统进程留下“1”个核心,每个节点每个执行程序中断“4”个核心,可以更好地利用集群资源。 @Karthick,您能否指定我们如何通过 slurm 批处理文件设置您建议的配置:#SBATCH --nodes=6 #SBATCH --mem-per-cpu=?? #SBATCH --cpus-per-task=?? #SBATCH --ntasks-per-node=?

以上是关于配置 spark 应用程序参数的最佳策略是啥?的主要内容,如果未能解决你的问题,请参考以下文章

重新启动火花流应用程序的最佳方法是啥?

在 Spark 中将可选参数建模为 UDF 的最佳方法是啥?

VS2010 和 CSS:单独定位表单控件的最佳策略是啥

从模板应用程序进行API调用的最佳策略?

pytorch深度学习模型调参策略:采用贝叶斯工具进行最优参数搜索及最佳步数确认

通过进程间通信将停止参数从.NET应用程序传递给服务的最佳技术是啥?