【问题标题】:Limiting Apache Spark CPU Usage限制 Apache Spark CPU 使用率
【发布时间】:2019-07-21 17:20:57
【问题描述】:

我正在使用具有 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();

【问题讨论】:

  • 也许这会有所帮助:spark.apache.org/docs/latest/tuning.html
  • @JohnSmith,我已经研究过了,它没有帮助。是关于如何设置 CPU Core ,而不是如何限制它。
  • 阿拉什,spark.cores.max 是一个limit 选项。在这种情况下,您将其限制为 5 个核心。请详细说明您的问题。
  • Arash,你有没有:Apache Hadoop YARN?
  • @JohnSmith,不,我以独立模式运行它,用于测试目的。

标签: apache-spark


【解决方案1】:

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

要管理本地模式下使用的核心数,需要将master设置为"local[max_number_of_cores]"

所以在你的情况下,这应该可以按预期工作:

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

【讨论】:

    【解决方案2】:

    您也许可以通过 cgroups 限制 spark 的核心使用,但我认为您不会想要这样做。

    你是在集群部署模式下运行吗?因为'spark.driver.cores'只有在集群部署模式下才生效。

    尝试显式设置驱动程序和执行程序的核心数量:

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

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

    假设您只使用此主机,您最终应该得到 1 个空闲 CPU。 这并不能像您想要的那样解决您的问题,但这就是 spark 的工作原理。

    【讨论】:

      【解决方案3】:

      如果是 CPU,spark.executor.cores 是 executor 可以运行的并发任务数量。有关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?

      【讨论】:

      • 因为我是在独立模式下运行它,所以不需要设置 spark.executor.cores,我也试过了。仍然飙升。
      猜你喜欢
      • 1970-01-01
      • 2011-02-26
      • 2017-01-25
      • 2012-07-06
      • 2016-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多