gpt4 book ai didi

apache-spark - EMR-5.32.0 上的 Spark 不产生请求的执行程序

转载 作者:行者123 更新时间:2023-12-04 12:16:02 32 4
gpt4 key购买 nike

我在 EMR(版本 5.32.0)上的 (Py)Spark 中遇到了一些问题。大约一年前,我在 EMR 集群上运行了相同的程序(我认为该版本一定是 5.29.0)。然后我可以使用 spark-submit 配置我的 PySpark 程序论据正确。但是,现在我正在运行相同/相似的代码,但是 spark-submit争论似乎没有任何效果。
我的集群配置:

  • 主节点:8 vCore,32 GiB 内存,仅 EBS 存储 EBS 存储:128 GiB
  • 从节点:10 x 16 vCore,64 GiB 内存,仅 EBS 存储 EBS 存储:256 GiB

  • 我使用以下 spark-submit 运行程序论据:
    spark-submit --master yarn --conf "spark.executor.cores=3" --conf "spark.executor.instances=40" --conf "spark.executor.memory=8g" --conf "spark.driver.memory=8g" --conf "spark.driver.maxResultSize=8g" --conf "spark.dynamicAllocation.enabled=false" --conf "spark.default.parallelism=480" update_from_text_context.py
    我没有更改集群上的默认配置中的任何内容。
    在 Spark UI 的屏幕截图下方,它仅指示 10 个执行程序,而我希望有 40 个执行程序可用...
    enter image description here
    我尝试了不同的 spark-submit参数以确保错误与 Apache Spark: setting executor instances does not change the executors 无关.我尝试了很多东西,似乎没有任何帮助。
    我在这里有点迷失,有人可以帮忙吗?
    更新:
    我在 EMR 版本标签 5.29.0 上运行了相同的代码,并且在 spark-submit 中有 conf 设置参数似乎有效果:
    enter image description here
    为什么会这样?

    最佳答案

    抱歉造成困惑,但这是故意的。在 emr-5.32.0 上,Spark+YARN 会将落在同一节点上的多个 executor 请求合并到一个更大的 executor 容器中。请注意,即使您的 executor 比您预期的要少,它们中的每一个都有更多您指定的内存和内核。 (不过,这里有一个星号,我将在下面解释。)
    此功能旨在在大多数情况下默认提供更好的性能。如果您真的希望保留以前的行为,您可以通过设置 spark.yarn.heterogeneousExecutors.enabled=false 来禁用此新功能,尽管我们(我在 EMR 团队中)想听听您为什么会出现以前的行为是可取的。
    但是,对我来说没有意义的一件事是,您最终应该拥有与没有此功能时相同的执行程序内核总数,但是对于您共享的示例似乎没有发生这种情况.您要求 40 个执行程序,每个执行程序具有 3 个内核,但随后得到了 10 个执行程序,每个执行程序具有 15 个内核,总数略多一些。这可能与您请求的 8g spark.executor.memory 划分为您选择的实例类型的可用内存的方式有关,我猜这可能是 m5.4xlarge。可以帮助您的一件事是删除 spark.executor.memory/cores/instances 的所有覆盖并仅使用默认值。我们希望默认设置在大多数情况下都能提供最佳性能。如果没有,就像我上面说的,请告诉我们,以便我们进一步改进!

    关于apache-spark - EMR-5.32.0 上的 Spark 不产生请求的执行程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65578417/

    32 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com