2016-09-15 107 views
0

我有一个带有6个物理内核的系统,每个内核有8个硬件线程,产生48个虚拟内核。以下是配置文件中的设置。apache spark过程的CPU消耗

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。

任何帮助将不胜感激。 谢谢 Shuja

回答

-1

根据您提供的信息,它看起来像只在spark-defaults.conf文件中设置信息。

为了在你的应用程序火花应用此配置,可以在代码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选项的应用程序。

+1

如果您在spark-defaults.conf中提及,那么不需要在其他地方重复这些属性。当您要覆盖默认属性时使用您在此处描述的设置。希望我向你说清楚。 – Shuja