我正在使用具有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();
答案 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的工作原理。