如果我将服务器上的所有可用内核分配给 spark 集群会发生啥

Posted

技术标签:

【中文标题】如果我将服务器上的所有可用内核分配给 spark 集群会发生啥【英文标题】:What happens if I allocate all the available cores on the server for spark cluster如果我将服务器上的所有可用内核分配给 spark 集群会发生什么 【发布时间】:2019-01-27 15:53:01 【问题描述】:

众所周知,在提交我们的应用程序时可以增加核数。实际上,我正在尝试为 Spark 应用程序分配服务器上的所有可用内核。我想知道表演会发生什么?会比平时减少或好转吗?

【问题讨论】:

您是否在任何集群管理器上运行 spark 应用程序? 我在 YARN 上运行 spark 应用程序。 【参考方案1】:

关于分配核心 (--executor-cores) 的第一件事可能会想到,执行器中的核心越多意味着并行度越高,并发执行的任务越多,性能越好。但火花生态系统并非如此。在将 1 个核心留给 os 和其他在 worker 中运行的应用程序之后,Study 表明为每个执行程序分配 5 个核心是最佳的。

例如,如果您有一个具有 16 个核心的工作节点,则每个执行器的最佳执行器总数和核心数将分别为 --num-executors 3--executor-cores 5(如 5*3=15)。

不仅优化的资源分配带来更好的性能,它还取决于如何对数据帧进行转换和操作。不同执行者之间更多的数据混洗会阻碍性能。

【讨论】:

【参考方案2】:

您的操作系统总是需要资源来满足其基本需求。 最好为操作系统和其他应用程序保留 1 个内核和 1 GB 内存。 如果您将所有资源分配给 spark,那么它不会提高您的性能,您的其他应用程序会急需资源。 我认为将所有资源仅分配给 spark 并不是更好的主意。 如果你想调整你的火花集群,请按照下面的帖子 How to tune spark executor number, cores and executor memory?

【讨论】:

以上是关于如果我将服务器上的所有可用内核分配给 spark 集群会发生啥的主要内容,如果未能解决你的问题,请参考以下文章

为啥 Spark Standalone 集群不使用所有可用的内核?

OS内核参数和JVM参数的调整

如果分配更多内核,单个 Spark 任务会在计算上消耗更多时间

为啥 local[*] 不使用我机器中的所有可用内核? [复制]

在多处理中如何将 CPU 内核分配给 python 进程?

Apache Spark - 将 UDF 的结果分配给多个数据框列