我正在为学校开发一个Spark项目,需要对使用过的内核数量进行基准测试。在得到一些混乱的结果之后,我意识到当我在执行期间使用“top”命令时,CPU使用率似乎大于指定的核心。例如,我设置了--total-executor-cores 8,并且CPU使用率大约为1100%,而不是<我期待的是800%。对于不同数量的核心,会发生相同的行为。这是在一个56核集群上运行,我相信这可能是7个8核Xeon CPU。
我还意识到,当我在8核笔记本电脑上设置内核时,CPU使用率会受到预期的限制。我已经尝试了许多设置核心/执行器数量的组合,但似乎无法理解它。即使在Spark配置代码中设置local [8]也不会将CPU使用率保持在800%以下。当我运行这个程序时,它来自Spark的本地副本(这是没有全局spark安装的共享学校服务器)。
我是如何运行Spark作业或Spark的本地副本中的默认值有什么问题?我猜我有一些简单的东西。
更新:我尝试了两个合成数据集,我使用10个功能和50k和100k样本创建。我注意到使用50k数据集设置本地[16] CPU使用率约为1800%,但是当我在100k数据集上运行相同的工作时,我看到CPU使用率为2500%。发生了什么,为什么我不能强制使用核心数量?
更新2 我运行程序时尝试了许多不同的设置,但无法控制正在使用的实际CPU。对于其中一个测试,我手动创建了主站和从站(start-master.sh/start-slave.sh)并让我的作业连接到主站。然后我使用htop命令查看服务器上每个核心的CPU使用情况,并看到了一些有趣的结果。当我设置--conf spark.cores.max = 1或2时,我看到了预期的CPU使用率。但是,当我将内核增加到4或更多时,我发现大多数内核的使用率为20-40%,而一些内核的内核接近90%。谁能解释这种行为?我原本预计设置4个核心会导致大多数空芯和4个最大化。在测试时我是群集中唯一的用户。
第一个屏幕截图显示了正在使用的2个核心的htop结果。您可以看到两个核心被最大化,其余核心的使用率非常低。使用的总CPU%是337%,如果你带两个工作核心和一个驱动程序,这是正确的,虽然我认为它将低于300%。 2 cores used
第二张截图显示完全相同的事情,除了我要求四个核心而不是两个核心。大约有四个核心使用率较高,但其余核心正在使用。总CPU使用率约为1500%,这对于四个核心来说是不正确的。 4 cores used