深入理解 Spark(四)Spark 内存管理模型

news2025/1/23 17:54:13

Spark 中的内存管理和资源管理模型

Executor 进程作为一个 JVM 进程,其内存管理建立在 JVM 的内存管理之上,整个大致包含两种方式:堆内内存和堆外内存。
在这里插入图片描述
一个 Executor 当中的所有 Task 是共享堆内内存的。一个 Work 中的多个 Executor 中的多个 Task 是共享堆外内存的。

Executor 内存划分

在这里插入图片描述

堆内内存和堆外内存

大数据领域两个比较常见的内存优化方案:

  • 引入堆外内存
  • 内存池化管理

作为一个 JVM 进程,Executor 的内存管理建立在 JVM 的内存管理之上,Spark 对 JVM 的堆内(Onheap)空间进行了更为详细的分配,以充分利用内存。同时,Spark 引入了堆外(Off-heap)内存,使之可以直接在工作节点的系统内存中开辟空间,进一步优化了内存的使用。
在这里插入图片描述

  • 没有堆外内存之前:min = n, max = m (假设 executor 的内存: x, executor 上运行的 Task 的数量: y,则每个 Task 均分得到的资源应该是: m = x / y , 设 n = m / 2,Task 能否运行取决于是否能申请到大小为 n 的初始内存)。每个 Task 能使用的资源使用量的区间:【m/2, m】,m = x/y
  • 引入堆外内存之后:堆外内存的大小:z, min = n, max = m + z。每个 Task 能使用的资源使用量的区间:【m/2, m + z】

Spark 对堆内内存的管理是一种逻辑上的规划式的管理,因为对象实例占用内存的申请和释放还是都由 JVM 完成,Spark 只能在申请后和释放前记录这些内存。堆内内存的大小,由 Spark 应用程序启动时的 --executor-memory 或 spark.executor.memory 参数配置。

  • 存储内存:存储 cache RDD 数据 和 广播变量数据(代码注释:used for caching andpropagating internal data across the cluster)
  • 执行内存:Shuffle 过程中占用的内存(代码注释:used for computation in shuffles, joins,sorts and aggregations)
  • other 空间:应用程序对象实例占用内存
堆内内存(On-Heap Memory)

在这里插入图片描述

  • Executor Memory: 由 spark.executor.memory 配置,或者在提交的时候使用 --executormemory 进行配置。
  • Reserved Memory: 这个内存是写死了的,默认 300MB,但也可以修改,前提是在测试环境下,通过修改 spark.test.reservedMemory 参数对这个值进行修改;这块内存用于存储 Spark 内部的对象。
  • Usable Memory: Executor Memory - Reserved Memory 就是可用内存。
  • Unified Memory: Usable Memory * spark.memeory.fraction 比例值(约等于 UsableMemory * 60%),这个内存由 Storage 和 Execution 共用,这两个之间有一个动态调节机制.
  • Storage Memory: Unified Memory * spark.storage.storageFraction 比例值(约等于 UnifiedMemory * 50%),这块内存主要是用来存储一些缓存数据的,比如 cache(),persist(),RDD 的缓存数据等。
  • Executor Memory: Unified Memory * (1 - spark.storage.storageFraction 比例值),这块内存用于存储 Shuffle,Join,Sort,Aggregate 等计算过程中的临时数据。
  • User Memory: Usable Memory * (1 - spark.memeory.fraction 比例值),这块内存用于保存 RDD 转换操作时需要的一些数据,如父子 RDD 的依赖关系。
堆外内存(Off-Heap Memory)

在这里插入图片描述

Task 能申请到的内存

spark.executor.cores 参数值就是 Spark 程序运行时得到的核数(以下简称为 N),每个 Task 能够分配到的内存大小为 1/2N ~ 1/N(举例,N=4,分配到的内存为 10G,那内存大小为 1.25G ~ 2.5G)。

静态内存管理模型:StaticMemoryManager

这种内存模型最大的问题是不熟悉 Spark 这种内存分配的开发者无法根据数据规模和任务规模做出相应的合理配置,容易造成旱的旱死,涝的涝死的水火两重天局面。Spark 为了兼容老版本应用程序的目的仍然保留了这种内存模型的实现和使用。
在这里插入图片描述

统一内存管理模型:UnifiedMemoryManager

Spark-1.6 之后引入的统一内存管理机制,与静态内存管理的区别在于存储内存和执行内存共享同一块空间,可以动态占用对方的空闲区域。凭借统一内存管理机制,Spark 在一定程度上提高了堆内和堆外内存资源的利用率,降低了开发者维护 Spark 内存的难度。
在这里插入图片描述

  • 如果存储内存已用完,可以占用执行内存中未用的内存。但是执行内存没有足够内存可用的时候,需要存储内存释放归还内存。
  • 如果执行内存已用完,可以占用存储内存中未用的内存。但是存储内存没有足够内存可用的时候,执行内存占用的存储内存是不会归还的。
  • 如果存储内存和执行内存都不足的时候,则他们会使用磁盘。

Spark MemoryManager 内存管理器

在这里插入图片描述

Spark BlockManager 资源管理机制原理

Spark-2.x 版本的 BlockManager 体系架构图:
在这里插入图片描述
Spark-3.x 版本的 BlockManager 体系架构图:
在这里插入图片描述
总共有四大类操作:

  • 往本地存储数据
  • 往远程复制数据副本
  • 从本地读取数据
  • 从远程拉取数据

Spark RDD 持久化机制 和 Checkpoint 机制

checkpoint 与 presist 持久化的区别:

  • 持久化将数据保存到 cache 中,rdd 的 lineage 不变;checkpoint 执行完成 rdd 已经没有了依赖关系,同时把父 rdd 设置成了 CheckpointRDD,rdd 的lineage 改变。
  • 持久化的数据存储在内存或磁盘,随着 Executor 的关闭,BlockManager 会被 Stop,则 cache 的数据会被清除;checkpoint 通常选择的是高容错性的文件系统,如 HDFS,数据的安全性非常高。
  • RDD 持久化,不影响 job 执行效率,但是 RDD checkpoint 会使这个 Job 重复执行一次!这个效率低,所以一般建议 Spark cache 和 checkpoint 联合使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1383810.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

centos源码编译安装nginx1.25.3脚本

Nginx是常见的反向代理服务器,以为经常要安装,所以做了一个install-nginx.sh 脚本,一个命令安装nginx #!/bin/sh # https://nginx.org/ # 本脚本自动安装 nginxr 软件到/usr/local/nginx 路径 # 安装成功后执行/usr/local/nginx/sbin/nginx即…

Javascript——vue下载blob文档流

<el-table-column label"操作" fixed"right" width"150" showOverflowTooltip><template slot-scope"scope"><el-button type"text" v-has"stbsd-gjcx-down" class"edit-button" click&…

[NAND Flash 5.5] PLC NAND 虽来但远

依公知及经验整理,原创保护,禁止转载。 专栏 《深入理解NAND Flash》 <<<< 返回总目录 <<<< 前言 图片来源: 存储随笔 2022年8月份在美国FMS峰会上,Solidigm公司(前身为Intel NAND部门)展示了全球第一款基于PLC NAND研发的SSD。这也标志着,PLC…

第 12 章 多路查找树

文章目录 12.1 二叉树与B 树12.1.1 二叉树的问题分析12.1.2 多叉树12.1.3 B 树的基本介绍 12.2 2-3 树12.2.1 2-3 树是最简单的 B 树结构, 具有如下特点:12.2.2 2-3 树应用案例12.2.3 其它说明 12.3 B 树、B树和 B*树12.3.1 B 树的介绍12.3.2 B 树的介绍12.3.3 B树的介绍12.3.4…

FL studio破解版 V20.8.3 最新中文破解版

FL Studio是一款功能强大的水果音乐制作软件&#xff0c;为用户提供了一个全能的数字音频工作站&#xff0c;软件提供了编曲、剪辑、录音、混音等功能&#xff0c;满足用户的各种音乐制作需求。软件已经成功破解&#xff0c;全中文的软件界面&#xff0c;去除了试用时间限制&am…

vscode(visual studio code) 免密登陆服务器

1.生成密钥 首先&#xff0c;在本地&#xff0c;打开命令输入框&#xff1a; WinR–>弹出输入框&#xff0c;输入cmd,打开命令框。 然后&#xff0c;在命令框&#xff0c;输入 ssh-keygen -t rsa -C "love"按两次回车键&#xff0c;问你是否重写&#xff0c;选择…

【AUTOSAR】--01 AUTOSAR网络管理基础

AUTOSAR网络管理做了几个项目了&#xff0c;但发现还是有些理解不够深入的地方&#xff0c;最近趁着有个新项目也要做AUTOSAR网络管理&#xff0c;再从头梳理一下AUTOSAR网络管理&#xff0c;预计用2-3篇文章&#xff0c;把AUTOSAR网络重新梳理完成。 这是第一篇&#xff0c;主…

高效构建Java应用:Maven入门和进阶(二)

高效构建Java应用&#xff1a;Maven入门和进阶&#xff08;二&#xff09; 二.基于IDEA的Maven的工程创建2.1 梳理Maven工程GAVP属性2.2 Idea构建Maven JavaSE工程2.3 Idea构建Maven JavaEE工程2.4 Maven工程项目结构说明 二.基于IDEA的Maven的工程创建 2.1 梳理Maven工程GAVP…

H7303 无电感,线性恒流,低压差,大电流,车灯/台灯 9V 12V 24V 30V

线性恒流芯片是一种用于控制电流的电子元件&#xff0c;通常用于驱动LED等器件。它的工作原理是通过维持输出电流的恒定来保持被驱动器件的亮度或功率稳定。 具体来说&#xff0c;线性恒流芯片会监测输出电流并调整电压以保持恒定的电流流过被驱动器件。以下是其基本工作步骤&…

SAP SD-DN-MM 交货单相关物料凭证的视图的日期问题

眼下有个需求 获取交货单对应的物料凭证的过账日期BLDAT。 同步BW数据过去 新增一个数据库视图 但是实际使用时&#xff0c;有效部分仅本月&#xff0c;再选择条件里面要加上 MATdoc-bldat > sy-datum - sydatum6(2). 于是使用ST05 跟踪了一下&#xff0c;发现在DD28S…

电影《潜行》中说的蜜罐是什么(网络安全知识)

近期刘德华、彭于晏主演的电影《潜行》在网上掀起了轩然大波&#xff0c;电影中有提到网络蜜罐&#xff0c;这引起了很多观众的疑问&#xff0c;蜜罐到底是什么&#xff1f; 从字面意思上来看&#xff0c;蜜罐就是为黑客设下的诱饵。这是一种具有牺牲性质的计算机系统&#xff…

PVE虚拟机配置文件恢复

一、pve 创建的虚拟机的配置文件位置 在宿主机的 /etc/pve/qemu-server&#xff0c;这里有创建虚拟机的相关硬件信息。 rootpve1:/etc/pve/qemu-server# pwd /etc/pve/qemu-server二、故障现象 在命令行执行qm list不显示虚拟机&#xff0c;查看 宿主机的 /etc/pve/qemu-ser…

第 10 章 树结构的基础部分

文章目录 10.1 二叉树10.1.1 为什么需要树这种数据结构10.1.2 树示意图10.1.3 二叉树的概念10.1.4 二叉树遍历的说明10.1.5 二叉树遍历应用实例(前序,中序,后序)10.1.6 二叉树-查找指定节点10.1.7 二叉树-删除节点10.1.8 二叉树-删除节点 10.2 顺序存储二叉树10.2.1 顺序存储二…

行业分享----dbaplus174期:美团基于Orchestrator的MySQL高可用实践

记录 MySQL高可用方案-MMM、MHA、MGR、PXC https://blog.csdn.net/jycjyc/article/details/119731980 美团数据库高可用架构的演进与设想 https://tech.meituan.com/2017/06/29/database-availability-architecture.html

数据结构(c)冒泡排序

本文除了最下面的代码是我写的&#xff0c;其余是网上抄写的。 冒泡排序 什么是冒泡排序&#xff1f; 冒泡排序&#xff08;Bubble Sort&#xff09;是一种简单的排序算法。它重复地走访过要排序的数列&#xff0c;一次比较两个元素&#xff0c;如果他们的顺序错误就把他们交…

相对原子质量和质子数和原子数的关系。

问题描述&#xff1a; 相对原子质量和质子数和原子数的关系。 问题解答&#xff1a; 相对原子质量&#xff08;相对原子质量单位&#xff0c;通常用amu表示&#xff09;和质子数、原子数之间存在一定的关系。这关系可以通过以下公式表示&#xff1a; 其中&#xff0c;是相对…

NLP论文阅读记录 - 2021 | 使用深度强化模型耦合上下文单词表示和注意机制的自动文本摘要

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作2.1 单词表示2.2 文本摘要方法 三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 Automatic text summarization us…

并发编程之并发容器

目录 并发容器 CopyOnWriteArrayList 应用场景 常用方法 读多写少场景使用CopyOnWriteArrayList举例 CopyOnWriteArrayList原理 CopyOnWriteArrayList 的缺陷 扩展迭代器fail-fast与fail-safe机制 ConcurrentHashMap 应用场景 常用方法 并发场景下线程安全举例 Con…

51-11 多模态论文串讲—VLMo 论文精读

VLMo: Unified Vision-Language Pre-Training with Mixture-of-Modality-Experts (NeurIPS 2022) VLMo 是一种多模态 Transformer 模型&#xff0c;从名字可以看得出来它是一种 Mixture-of-Modality-Experts (MoME)&#xff0c;即混合多模态专家。怎么理解呢&#xff1f;主流 …

[学习笔记]刘知远团队大模型技术与交叉应用L1-NLPBig Model Basics

本节主要介绍NLP和大模型的基础知识。提及了词表示如何从one-hot发展到Word Embedding。语言模型如何从N-gram发展成预训练语言模型PLMs。然后介绍了大模型在NLP任务上的表现&#xff0c;以及它遵循的基本范式。最后介绍了本课程需要用到的编程环境和GPU服务器。 一篇NLP方向的…