我的系统有6个物理内核,每个内核有8个硬件线程,产生48个虚拟内核。以下是配置文件中的设置。
spark-env.sh
导出SPARK_WORKER_CORES = 1
火花defaults.conf
spark.driver.cores 1
spark.executor.cores 1
spark.cores.max 1
所以这意味着它应该只使用1个虚拟核心,但是如果我们看到TOP命令的输出,有时候会出现非常大的峰值,例如CPU消耗高于4000,例如
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22581 sbaig 20 0 0.278t 0.064t 37312 S 4728 6.4 7:11.30 java
....
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22581 sbaig 20 0 0.278t 0.065t 37312 S 1502 6.5 8:22.75 java
...
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22581 sbaig 20 0 0.278t 0.065t 37312 S 4035 6.6 9:51.64 java
...
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22581 sbaig 20 0 0.278t 0.080t 37312 S 3445 8.1 15:06.26 java
...
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
22581 sbaig 20 0 0.278t 0.082t 37312 S 4178 8.2 17:37.59 java
...
这意味着,而不是使用1个虚拟核心,火花正在使用系统中的所有可用核心,所以我的问题是为什么它的行为是这样的?为什么在执行我们在SPARK_WORKER_CORES属性中设置的作业时不使用1个核心。
我在独立模式下使用spark 1.6.1。
任何帮助都将受到高度赞赏。 谢谢 舒亚
答案 0 :(得分:-1)
根据您提供的信息,您似乎只在spark-defaults.conf文件中设置信息。
要在spark应用程序中应用此配置,您必须在创建spark上下文时在 SparkConf
代码对象中配置这三个属性,如下所示。
var conf = new SparkConf()
conf.set("spark.driver.cores","1")
conf.set("spark.executor.cores","1")
conf.set("spark.cores.max","1")
或者,如果您使用 spark-submit CLI
提交申请,则可以使用 --driver-cores
, --executor-cores
和 --conf spark.cores.max=1
选项在运行应用程序时。