Spark 中执行器和任务的内存分配

2024-03-31

我的集群配置如下:- 7 个节点,每个节点有 32 个核心和 252 GB 内存。

纱线配置如下:-

yarn.scheduler.maximum-allocation-mb - 10GB
yarn.scheduler.minimum-allocation-mb - 2GB
yarn.nodemanager.vmem-pmem-ratio - 2.1
yarn.nodemanager.resource.memory-mb - 22GB
yarn.scheduler.maximum-allocation-vcores - 25
yarn.scheduler.minimum-allocation-vcores - 1
yarn.nodemanager.resource.cpu-vcores - 25

地图缩减配置如下:-

mapreduce.map.java.opts - -Xmx1638m
mapreduce.map.memory.mb - 2GB
mapreduce.reduce.java.opts - -Xmx3276m
mapreduce.reduce.memory.mb - 4Gb

火花配置如下:-

spark.yarn.driver.memoryOverhead 384
spark.yarn.executor.memoryOverhead 384

现在,我尝试通过将值设置为主纱线以及执行器内存、执行器数量、执行器核心的不同值来运行spark-shell。

  1. Spark-shell --master 纱线 --executor-内存 9856M --num-executors 175 --executor-cores 1

在这种情况下,执行程序内存 + 384 对于纱线​​调度程序来说不能超过 10GB 最大值。所以在这种情况下 9856M + 384 MB = 10GB 所以它工作正常。现在,一旦 Spark shell 启动,执行程序总数为 124 个,而不是要求的 175 个。在 Spark shell 启动日志或 Spark UI 中看到每个执行程序的存储内存为 6.7 GB(即 10GB 的 67%)。

Spark shell 进程的 top 命令输出如下:-

PID     USER      PR    NI  VIRT  RES   SHR S  %CPU %MEM  TIME+  
8478    hdp66-ss  20    0   13.5g 1.1g  25m S  1.9  0.4   2:11.28

所以虚拟内存是13.5G,物理内存是1.1G

  1. Spark-shell --master 纱线 --executor-内存 9856M --num-executors 35 --executor-cores 5

在这种情况下,执行程序内存 + 384 对于纱线​​调度程序来说不能超过 10GB 最大值。所以在这种情况下 9856M + 384 MB = 10GB 所以它工作正常。现在,一旦 Spark shell 启动,执行程序的总数为 35 个。在 Spark shell 启动日志或 Spark UI 中看到每个执行程序的存储内存为 6.7 GB(即 10GB 的 67%)。

Spark shell 进程的 top 命令输出如下:-

PID     USER      PR    NI  VIRT  RES   SHR S  %CPU %MEM  TIME+  
5256    hdp66-ss  20    0   13.2g 1.1g  25m S  2.6  0.4   1:25.25

所以虚拟内存是13.2G,物理内存是1.1G

  1. Spark-shell --master 纱线 --executor-内存 4096M --num-executors 200 --executor-cores 1

在这种情况下,执行程序内存 + 384 对于纱线​​调度程序来说不能超过 10GB 最大值。所以在这种情况下 4096M + 384 MB = 4GB 所以它工作正常。现在,一旦 Spark shell 启动,执行程序的总数为 200。在 Spark shell 启动日志或 Spark UI 中看到每个执行程序的存储内存为 2.7 GB(即 4GB 的 67%)。

Spark shell 进程的 top 命令输出如下:-

PID     USER      PR    NI  VIRT  RES   SHR S  %CPU %MEM  TIME+  
21518   hdp66-ss  20    0   19.2g 1.4g  25m S  3.9  0.6   2:24.46

所以虚拟内存是19.2G,物理内存是1.4G。

那么有人可以解释一下这些记忆和执行者是如何开始的吗?为什么在 Spark UI 上看到的内存是执行程序内存请求的 67%?以及每个执行器的虚拟内存和物理内存是如何决定的。


Spark 几乎总是分配用户为执行器请求的 65% 到 70% 的内存。 Spark 的这种行为是由于 SPARK JIRA TICKET 造成的“SPARK-12579”.

此链接指向位于 Apache Spark 存储库中的 scala 文件,该文件用于计算执行程序内存等。 https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/memory/UnifiedMemoryManager.scala

    if (conf.contains("spark.executor.memory")) {
  val executorMemory = conf.getSizeAsBytes("spark.executor.memory")
  if (executorMemory < minSystemMemory) {
    throw new IllegalArgumentException(s"Executor memory $executorMemory must be at least " +
      s"$minSystemMemory. Please increase executor memory using the " +
      s"--executor-memory option or spark.executor.memory in Spark configuration.")
  }
}
val usableMemory = systemMemory - reservedMemory
val memoryFraction = conf.getDouble("spark.memory.fraction", 0.6)
(usableMemory * memoryFraction).toLong

}

上面的代码对您所看到的行为负责。这是针对集群可能没有用户请求的内存的情况的安全保障。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Spark 中执行器和任务的内存分配 的相关文章

随机推荐

  • 以良好的质量和内存效率缩小资源中的位图

    我想缩小 500x500px 资源以始终适合由屏幕宽度确定的特定尺寸 目前我使用 Android 开发者网站 高效加载大位图 http developer android com training displaying bitmaps lo
  • on_message() 和 @bot.command 问题

    当我有on message 在我的代码中 它会停止所有其他的 bot command来自工作的命令 我尝试过await bot process commands message 但这也行不通 这是我的代码 bot event command
  • SQL Server - PIVOT - 两列转换为行

    我在一个专栏中看到了很多关于 PIVOT 的问题 每个问题都比其他问题更复杂 但是 我找不到我需要的任何内容 老实说 我什至不知道pivot在这种情况下是否能帮助我 假设我的源表中有这些数据 SELECT 1 as RowId Random
  • 混淆 .fmt 行为与嵌套列表

    The docs https docs raku org routine fmt比如说fmt 返回一个字符串 其中列表中的每个元素都已根据以下格式进行格式化 format 第一个参数 并且每个元素由 separator 第二个论点 根据该描
  • EmguCV (OpenCV) ORBDetector 仅发现不良匹配

    Problem 所以总的来说 我对计算机视觉还很陌生 我目前正在尝试通过分析 2 个图像来计算单应性 我想使用单应性来校正 1 个图像的视角以匹配另一个图像 但我得到的比赛却很糟糕而且错误 所以我所做的单应性扭曲完全关闭了 当前状态 我正在
  • 在“data.table”中使用动态列名

    我想计算 data table 中每一列的平均值 并按另一列分组 我的问题与另外两个问题类似 one https stackoverflow com questions 12391950 variably selecting assigni
  • 创建 IEnumerable.Find()

    我想写 IEnumerable
  • Hibernate Envers:检索具有集合属性的实体的正确修订

    我有两个经过审计的实体 A 和 B 实体 A 拥有实体 B 的集合 注释为一对多关系 将 A 的新实例插入数据库时 A 和 B 的所有行都处于同一修订版 假设为修订版 1 然后 A 上有一个更新 仅影响实体 B 的实例 因此 更新后 实体
  • WiX RemoveRegistryKey 元素的行为不符合广告

    卸载时我似乎无法删除注册表项 请注意 这不是重复this https stackoverflow com questions 3317281 wix doesnt remove registrykey on uninstall问题 因为我不
  • scikit-learn - 将管道预测转换为原始值/规模

    我创建了一个管道 如下所示 使用Keras Scikit Learn API https keras io scikit learn api estimators estimators append standardize Standard
  • 如何使用 jquery 禁用列表框中的多重选择?或者JavaScript?

    我的页面中有一个列表框 td 我需要禁止从列表框中选择多个项目吗 我正在做一些事情 比如选择一个项目 然后单击 删除 按钮 我的页面会从列表框中删除一项 但是如果我选择多个项目 则会抛出一条错误消息 任何人都可以帮我解决如何停用或禁用列表框
  • 熊猫重新索引日期索引按组重新访问

    之前已经问过这个问题 这里已经提出了一个可行的解决方案Pandas 在 Groupby 中重新索引日期 https stackoverflow com questions 32275540 pandas reindex dates in g
  • GraphViz:未使用新安装程序设置 Windows PATH,从 R 调用时出现问题

    在 R 库中 我使用dot程序 来自 GraphViz 来生成一些图形 通常为 png 格式 dot是一个通常的可执行文件 我通过systemR 命令 到目前为止 一切都运行良好 因为 GraphViz 安装程序正在添加dot到 PATH
  • 以 Vararg 作为第一个参数的 Kotlin 方法

    Note我查看了以下问题 答案来解决问题 但没有任何运气 从 Kotlin 调用 Java Varargs 方法 https stackoverflow com questions 36626152 call java varargs me
  • 具有特定数字的浮点精度

    以下值给出了错误的精度 仅通过特定数字即可观察到这一点 可能是浮动表示问题 但想知道具体原因 String m 154572 49 154 572 49 Float f Float parseFloat m System out print
  • 了解 Go 中的 http handlerfunc 包装器技术

    我看到一个马特 赖尔撰写的文章 https medium com statuscode how i write go http services after seven years 37c208122831关于如何使用服务器类型和包装器类型
  • 字符串驻留和文字字符串声明的搜索成本

    两个问题 当我们声明文字字符串时 我们会在堆的字符串池中查找是否有相同的字符串 这也是实习吗 班级的方法实习生String 在我看来 每个文字字符串声明都需要进行二分搜索或其他操作 因此它至少需要花费log n when n是池中现有字符串
  • 从 sqlalchemy 关系中选择具有最大值的项目

    给定这对类 class Thing Base id Column Integer primary key True class ThingInfo Base id Column Integer primary key True thing
  • Angular 中的 window.onload

    Angular 中是否有相当于 window onload 事件的事件 我想淡出并删除预加载器 但前提是加载了所有资源 例如图像 由于 viewConteneLoaded 仅指示将 html 插入视图 我正在使用 ngRotue 因此监听它
  • Spark 中执行器和任务的内存分配

    我的集群配置如下 7 个节点 每个节点有 32 个核心和 252 GB 内存 纱线配置如下 yarn scheduler maximum allocation mb 10GB yarn scheduler minimum allocatio