繁体   English   中英

如果我保持核心总数一致,我应该如何选择执行器的数量和每个执行器的核心数?

[英]If I keep the total number of cores consistent, how should I choose the number of executors and number of cores per executor?

假设我正在使用具有 2 个 i3.metal 实例的集群,每个实例具有 512GiB 的 memory 和 72 个 vCPU 内核(来源)。 如果我想使用所有核心,我需要对执行器和每个执行器的核心进行一些配置,这样我就有 144 个核心。 似乎有很多选择; 例如,我可以有 72 个执行器,每个执行器有 2 个核心,或者我可以有 36 个执行器,每个执行器有 4 个核心。 无论哪种方式,我最终都会得到相同数量的内核和每个内核相同数量的 memory。

如何在这两种配置或更多可用配置之间进行选择? 两者在功能上有区别吗?

我已经阅读了Cloudera 的关于 spark 作业的参数调整的博客文章,但它没有回答这个问题。 我也搜索过相关帖子,但同样没有找到这个问题的答案。

这篇文章中最佳答案的评论表明没有一个答案,应该针对每项工作进行调整。 如果是这种情况,我将不胜感激任何“一般智慧”!

事实上,对于所有用例都没有绝对的答案。 每个工作都不一样。

当我想执行一项新工作时,我使用的一般智慧是从一个介于瘦执行器和胖执行器之间的默认配置开始:每个执行器有几个核心,每台机器有几个执行器。

我通常将每台机器的核心数的平方根作为每个执行程序的核心数。 然后,我根据工作微调这些参数,比较性能,同时查看硬件瓶颈(内存?内核?磁盘?网络?)。 如果作业失败,从数据集的子集开始,然后扩大规模也有帮助。

因此,使用这种配置,我会直观地从 18 个执行器(每台机器 9 个)开始,每个执行器有 8 个核心,但是作为初始配置,我觉得 36 个有 4 个核心的执行器听起来也很合理。

由于资源和瓶颈方面的各种原因,每个(瘦)执行器使用一个核心,或者每个节点一个(胖)执行器占用机器的所有核心往往效率低下。

此外,Spark 对每个执行程序的 memory 有默认上限。 如果执行器数量很少且内核数量很多,则除非您分配更多,否则它将未充分利用 memory。

我希望这有帮助!

我会说每个执行程序 5 个核心将是一个最佳点,不会对您的输入数据源造成任何 IO 负担。 话虽如此,还要确保每个内核的 memory 不会太少。 理想情况下,每个执行器的 go 不小于 8g。

正如 Ghislain 提到的,这取决于您的操作,但这就是我要开始的地方。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM