2016-09-15 46 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