如果我将服务器上的所有可用内核分配给 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 集群不使用所有可用的内核?
如果分配更多内核,单个 Spark 任务会在计算上消耗更多时间