限制Apache Spark CPU使用率

时间:2019-07-21 06:47:19

标签: apache-spark

我正在使用具有60 GB数据的Apache Spark(独立模式)ALS推荐算法,问题是算法启动时CPU峰值达到100% 如何在Spark中设置CPU使用限制? 例如仅使用50%的CPU。

我尝试使用更少的CPU内核,但是它并没有改变CPU使用率。

我在具有以下配置的服务器中以独立模式运行spark:

#System information :
OS Name:                   Microsoft Windows Server 2016 Standard
OS Version:                10.0.14393 N/A Build 14393
System Type:               x64-based PC
Processor(s):              1 Processor(s) Installed.
Cores:                     6
Total Physical Memory:     262,030 MB
Available Physical Memory: 178,164 MB
Virtual Memory: Max Size:  300,942 MB
Virtual Memory: Available: 215,377 MB

#Spark 
version 2.4.3

#Java
java version "10.0.2" 2018-07-17
Java(TM) SE Runtime Environment 18.3 (build 10.0.2+13)
Java HotSpot(TM) 64-Bit Server VM 18.3 (build 10.0.2+13, mixed mode)

我已经使用以下配置设置了我的spark会话:

spark_session = SparkSession \
    .builder \
    .appName("ALSRecommendation") \
    .config("spark.driver.memory","60G")\
    .config('spark.cores.max', 5)\
    .config("spark.driver.cores",5)\
    .getOrCreate();

3 个答案:

答案 0 :(得分:1)

您似乎不是在独立模式下运行(实际上是集群模式),而是在本地模式下运行,即单个JVM。

要管理在本地模式下使用的内核数,您需要将主服务器设置为“ local [max_number_of_cores]”

因此,在您的情况下,这应该可以正常工作:

spark_session = SparkSession \
    .builder \
    .appName("ALSRecommendation") \
    .master("local[5]") \
    .config("spark.driver.memory","60G")\
    .getOrCreate();

答案 1 :(得分:0)

对于CPU, spark.executor.cores 是执行程序可以运行的并发任务数量。有关Spark Configuration Documentation的更多信息。

spark.executor.cores 1在YARN模式下,worker上所有可用的内核分别处于独立模式和Mesos粗粒度模式。

编辑:好,在独立集群中,Spark仅使用提供的资源池管理应用程序预定义的资源配置。 (https://spark.apache.org/docs/latest/spark-standalone.html

另请参阅:How to tune spark executor number, cores and executor memory?

答案 2 :(得分:0)

您也许可以通过cgroup来限制spark的核心用法,但我认为您不想参与其中。

您是否以集群部署模式运行?因为'spark.driver.cores'仅在使用集群部署模式时有效。

尝试明确设置驱动程序和执行程序的内核数量:

(spark.executor.cores=3)
(spark.driver.cores=2)

并摆脱“ spark.core.max”设置。

假设您仅使用此主机,则最终应获得1个可用CPU。 这不能解决您想要的问题,但这只是spark的工作原理。

相关问题