apache spark进程的CPU消耗

Posted

技术标签:

【中文标题】apache spark进程的CPU消耗【英文标题】:CPU Consumption of apache spark process 【发布时间】:2016-09-15 08:55:51 【问题描述】:

我有一个具有 6 个物理内核的系统,每个内核有 8 个硬件线程,从而产生 48 个虚拟内核。以下是配置文件中的设置。

spark-env.sh

导出 SPARK_WORKER_CORES=1

spark-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
...

这意味着,spark 不是使用 1 个虚拟核心,而是使用系统中所有可用的核心,所以我的问题是为什么它会这样?为什么在执行我们在 SPARK_WORKER_CORES 属性中设置的作业期间它不只使用 1 个核心。

我正在使用带有独立模式的 spark 1.6.1。

任何帮助将不胜感激。 谢谢 舒加

【问题讨论】:

你找到解决方案了吗,我也有同样的问题。 【参考方案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 运行应用程序时的选项。

【讨论】:

如果您在 spark-defaults.conf 中提及,则无需在其他任何地方重复这些属性。您在此处描述的设置在您想要覆盖默认属性时使用。希望我对你说清楚了。

以上是关于apache spark进程的CPU消耗的主要内容,如果未能解决你的问题,请参考以下文章

SQL Server 2014下Database Mail Engine进程消耗大量CPU资源

查看JAVA进程中哪个线程CPU消耗最高

linux下查看最消耗CPU内存的进程

modrails - 流氓 ruby​​ 进程消耗 100% cpu

如何使用 dtrace 显示每个进程消耗的微秒 cpu?

Linux终端查看最消耗CPU内存的进程