当前位置: 首页 > 知识库问答 >
问题:

Spark 驱动程序的内存如何影响执行程序资源?

华知
2023-03-14

我正在通过阅读高性能Spark来学习如何配置Spark应用程序,其中提到的一句话让我感到困惑:

根据我的经验,设置Spark驱动程序内存的良好启发式方法只是不会导致驱动程序内存错误的最低可能值,即为执行程序提供最大可能的资源。

我的理解是驱动程序存在于它自己的节点中,而执行程序独立存在于工作节点上。我本以为我可以最大限度地利用驱动程序内存,而不必担心它会影响执行程序。

这本书的建议是真的吗?如果是,驱动程序内存为什么/如何影响执行器资源?

共有2个答案

艾令雪
2023-03-14

Spark 驱动程序的内存如何影响执行程序资源?

它不会(除了一种边缘情况,即驱动程序和执行程序都在同一台机器上运行)。

我的理解是驱动程序存在于它自己的节点中,而执行程序独立存在于工作节点上。我本以为我可以最大限度地利用驱动程序内存,而不必担心它会影响执行程序。

这也是我的理解,似乎找不到一个部署场景来证明我们是错的。

我认为没有“即”部分的段落更有意义。

根据我的经验,设置Spark驱动程序内存的一个很好的启发式方法就是尽可能低的值,这不会导致驱动程序内存错误。

这完全没问题。

龚玄天
2023-03-14

排除本地模式,驱动程序可以与执行程序共存:

  • 在集群模式下,驱动程序在其中一个工作节点上运行。
  • 在客户端模式下,如果它已在其中一个工作节点上启动。

在这两种情况下,驱动程序都可以与执行程序竞争相同的资源池。在第一种情况下,它发生在资源管理器级别,在第二种情况下发生在主机系统级别。

第二种情况不太有趣,但在第一种情况下,分配给驱动程序的资源将减少集群管理器可以提供给执行者的池。

 类似资料:
  • 我正在对YARN上的Spark作业进行一些内存调优,我注意到不同的设置会给出不同的结果,并影响Spark作业运行的结果。但是,我很困惑,不明白为什么会这样,如果有人能给我一些指导和解释,我会很感激。 我将提供一些背景资料和张贴我的问题和描述案例,我已经经历了他们在下面。 我的环境设置如下: 存储器20G,每个节点20个vCore(共3个节点) Hadoop 2.6.0 火花1.4.0 我的代码对R

  • null null 为了进行简单的开发,我使用在独立集群模式下(8个工作者、20个内核、45.3G内存)执行了我的Python代码。现在我想为性能调优设置执行器内存或驱动程序内存。 在Spark文档中,执行器内存的定义是 每个执行程序进程使用的内存量,格式与JVM内存字符串相同(例如512M、2G)。

  • 我是否正确理解了客户端模式的文档? 客户端模式与驱动程序在应用程序主程序中运行的集群模式相反? 在客户端模式下,驱动程序和应用程序主程序是独立的进程,因此+必须小于计算机的内存? 在客户端模式下,驱动程序内存不包括在应用程序主内存设置中吗?

  • 我使用了Spark 2.1.1,并升级到了最新版本2.4.4。我从Spark UI观察到驱动程序内存在不断增加,在长时间运行之后,我出现了以下错误:java。lang.OutOfMemoryError:超出GC开销限制 在Spark 2.1.1中,驱动程序内存消耗(存储内存选项卡)极低,在运行ContextCleaner和BlockManager后,内存正在减少。 此外,我测试了Spark版本2.

  • 我是Spark的初学者,我正在运行我的应用程序,从文本文件中读取14KB的数据,执行一些转换和操作(收集、收集AsMap),并将数据保存到数据库 我在我的macbook上本地运行它,内存为16G,有8个逻辑核。 Java最大堆设置为12G。 这是我用来运行应用程序的命令。 bin/spark-submit-class com . myapp . application-master local[*

  • 我在一个单独的Docker中运行spark-master和spark-worker。 我能看见他们在跑 PS-EF grep火花根3477 3441 0 1 05?00:04:17/usr/lib/jvm/java-1.8-openjdk/jre/bin/java-cp/usr/local/spark/conf/:/usr/local/spark/jars/*-xmx1g org.apache.s