我想只用1个线程运行Spark。但是无论我尝试哪种选择,Spark始终会在CPU中使用所有8个内核。
我尝试了--master local
,--master local[1]
,--executor-cores 1
,--total-executor-cores 1
,--conf spark.max.cores=1
选项的各种混合,但是没有任何效果。当我在Ubuntu 14.04上看到top
结果时,CPU使用率始终约为600%(大约75%* 8核)。
我的目标是通过使用不同数量的内核来比较Spark任务的运行时间。请帮忙!
** 添加
我正在研究https://github.com/amplab/SparkNet/blob/master/src/main/scala/apps/CifarApp.scala中的代码。衷心感谢大家的帮助。
最佳答案
首先,您要混合使用属于不同部署模式的选项。像spark.cores.max
(不是spark.max.cores
)或spark.executor.cores
这样的参数仅在独立模式(与本地模式不同)和Yarn上才有意义。
在本地模式下,真正重要的是随主定义(local[n]
)传递的参数n。这并不意味着local[1]
将仅使用一个线程运行。单独使用Spark会使用许多不同的线程(如果我没记错的话,大约有20个左右)用于簿记,监督,改组,UI和其他内容。
受限制的是执行程序线程的数量。这仍然并不意味着单个执行程序不能启动一个以上的线程,这在这里很可能是这种情况。您正在使用专为并行执行而设计的库。如果不使用GPU,则最有可能在CPU上并行执行计算。所有这些都是独立的,不受Spark本身的控制。如果要完全控制,则应在VM或容器等受限环境中执行应用程序。
关于apache-spark - 尽管我只设置了1个线程,但Spark使用了所有可用的内核,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35548857/