Apache spark 虽然我只设置了1个线程,但是Spark使用了所有可用的内核

Apache spark 虽然我只设置了1个线程,但是Spark使用了所有可用的内核,apache-spark,Apache Spark,我只想用一根线运行Spark。但无论我尝试了什么选择,Spark总是使用我CPU中的所有8核 我尝试了各种混合的--master local,--master local[1],--executor cores 1,--total executor cores 1,--conf spark.max.cores=1选项,但没有任何效果。当我在Ubuntu14.04上看到top结果时,CPU使用率总是在600%左右(大约75%*8核) 我的目标是通过使用不同数量的内核来比较Spark任务的运行时间。

我只想用一根线运行Spark。但无论我尝试了什么选择,Spark总是使用我CPU中的所有8核

我尝试了各种混合的
--master local
--master local[1]
--executor cores 1
--total executor cores 1
--conf spark.max.cores=1
选项,但没有任何效果。当我在Ubuntu14.04上看到
top
结果时,CPU使用率总是在600%左右(大约75%*8核)

我的目标是通过使用不同数量的内核来比较Spark任务的运行时间。请帮忙

**增加


我正在处理来自的代码。衷心感谢大家的帮助。

您提到的代码使用
SparkContext.parallelize(…)
而无需设置
numPartitions
参数。这意味着
spark.default.parallelism
(请参阅)的值用于确定要使用的部件数==核心数

在单据中,此参数默认为:

对于无父RDD的并行化等操作,它取决于群集管理器:

  • 本地模式:本地计算机上的磁芯数

因此,在命令中添加
--conf spark.default.parallelism=1应该使这些RDD使用单个分区,从而使用单个核心。

首先,您混合了属于不同部署模式的选项。像
spark.cores.max
(而不是
spark.max.cores
)或
spark.executor.cores
这样的参数只有在独立模式(与本地模式不同)和纱线上才有意义

对于本地模式,唯一真正重要的是主定义传递的参数n(
local[n]
)。这并不意味着
local[1]
将只使用一个线程运行。Spark单独使用了许多不同的线程(如果我没记错的话,大约20个)来记账、管理、洗牌、UI和其他东西


限制的是执行器线程的数量。这仍然不意味着单个执行器不能启动多个线程,这里最有可能的情况就是这样。您正在使用为并行执行而设计的库。如果不使用GPU,那么计算很可能在CPU上并行执行。所有这些都是独立的,不受Spark本身的控制。如果您想要完全控制,您应该在受限制的环境(如VM或容器)中执行应用程序。

您可以共享一些正在使用的代码吗?具体来说,您首先在哪里加载RDD?如果您使用的是
SparkContext.parallelize
,请注意,它可以使用第二个Int参数(参见,Int,scala.reflect.ClassTag))来指示部件的数量;如果将其设置为1,您可能会实现您想要实现的目标-RDD只有一个部分,因此只有一个核心能够处理它(当然,除非数据被进一步重新分区)。@TzachZohar感谢您的帮助。我编辑了我的帖子并添加了源代码的链接。我已经研究这个问题好几天了,但我仍然不知道答案……SparkNet建议这个命令的最后一个参数是要使用的工人数量(在自述文件示例中为5)-您要为这个参数传递什么值?@TzachZohar我尝试了各种值,例如1、2、5、8等等。即使我在最后一个参数中使用了1,来自
top
的CPU使用率仍然在600%左右。@TzachZohar哦,我通过更改
Net.scala
文件关闭了GPU选项,该文件也在SparkNet项目中。如果打开GPU选项,则会出现相反的情况。不管我在这个选项上设置了多少线程,只有130%的CPU被使用。我运行了这个命令:
spark submit--master local--class apps.CifarApp--conf spark.default.parallelism=1./target/scala-2.10/sparknet-assembly-0.1-SNAPSHOT.jar 1
,但CPU使用率仍然是600%。一件有趣的事情是,CPU0~CPU6的CPU使用率为70%,而CPU7的使用率为98%。另一方面,例如,如果
spark.default.parallelism
设置为
5
,那么即使我设置了
--master local
(这将允许spark只使用1个线程),spark也会运行5个并行线程吗?谢谢你的帮助,@TzachZohar!!应用程序不解释其他参数,因为在创建SparkContext时,它不需要spark在内部通过命令行使用所有参数。