CPU消耗的apache spark进程

时间:2016-09-15 08:55:51

标签: apache-spark cpu-usage

我的系统有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。

任何帮助都将受到高度赞赏。 谢谢 舒亚

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 选项在运行应用程序时。