apache-spark - 尽管我只设置了1个线程,但Spark使用了所有可用的内核

标签 apache-spark

我想只用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/

相关文章:

scala - Spark ElasticSearch配置-从Spark读取Elastic Search

apache-spark - Spark 流 DirectKafkaInputDStream : kafka data source can easily stress the driver node

apache-spark - PySpark - 添加新的嵌套列或更改现有嵌套列的值

java - Spark : duplicate stages while using join

apache-spark - Spark SQL 数据帧 : best way to compute across rowpairs

apache-spark - 如何将流式数据集写入 Hive?

hadoop - 有没有一种方法可以将某种缓存用于Spark中最常用的查询的结果?

scala - UDF 与自定义表达式

azure - 如何访问 Microsoft Azure HDInsight 中的 blob 存储?

arrays - 从空数组创建类型化数组列