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资源