gpt4 book ai didi

apache-spark - Spark 客户端模式 - YARN 为驱动程序分配一个容器?

转载 作者:行者123 更新时间:2023-12-03 21:20:53 25 4
gpt4 key购买 nike

我在客户端模式下在 YARN 上运行 Spark,所以我希望 YARN 只会为执行程序分配容器。然而,从我所看到的,似乎也为驱动程序分配了一个容器,而且我没有得到预期的那么多执行程序。

我在主节点上运行 spark submit。参数如下:

sudo spark-submit --class ... \
--conf spark.master=yarn \
--conf spark.submit.deployMode=client \
--conf spark.yarn.am.cores=2 \
--conf spark.yarn.am.memory=8G \
--conf spark.executor.instances=5 \
--conf spark.executor.cores=3 \
--conf spark.executor.memory=10G \
--conf spark.dynamicAllocation.enabled=false \

在运行此应用程序时,Spark UI 的 Executors 页面显示 1 个驱动程序和 4 个执行程序(总共 5 个条目)。我希望有 5 个,而不是 4 个执行者。
同时,YARN UI 的 Nodes 选项卡显示在实际未使用的节点上(至少根据 Spark UI 的 Executors 页面...)分配了一个容器,使用 9GB 内存。其余节点上运行着容器,每个节点有 11GB 的内存。

因为在我的 Spark Submit 中,driver 的内存比 executors 少 2GB,所以我认为 YARN 分配的 9GB 容器是给驱动程序的。

为什么要分配这个额外的容器?我怎样才能防止这种情况?

Spark 界面:

Spark UI's Executor tab

yarn 用户界面:

YARN UI's Nodes tab

Igor Dvorzhak 回答后更新

我错误地假设 AM 将在主节点上运行,并且它将包含驱动程序应用程序(因此设置 spark.yarn.am.* 设置将与驱动程序进程相关)。

所以我做了以下改动:
  • 设置 spark.yarn.am.*设置为默认值(512m 内存,1 核)
  • 通过 spark.driver.memory 设置驱动程序内存到 8g
  • 根本没有尝试设置驱动内核,因为它只对集群模式有效

  • 因为默认设置下的 AM 占用了 512m + 384m 的开销,所以它的容器适合工作节点上的 1GB 空闲内存。
    Spark 得到它请求的 5 个 executor,驱动内存适合 8g 设置。现在一切都按预期工作。

    Spark 界面:

    Spark UI's Executor tab

    yarn 用户界面:

    enter image description here

    最佳答案

    额外的容器被分配给 YARN application master :

    In client mode, the driver runs in the client process, and the application master is only used for requesting resources from YARN.



    即使在客户端模式下驱动程序在客户端进程中运行,YARN 应用程序 master 仍然在 YARN 上运行并且需要容器分配。

    没有办法阻止 YARN 应用程序主机的容器分配。

    供引用,之前问过类似问题: Resource Allocation with Spark and Yarn .

    关于apache-spark - Spark 客户端模式 - YARN 为驱动程序分配一个容器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51582475/

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