我的编程空间,编程开发者的网络收藏夹
学习永远不晚

Spark内存管理

短信预约 信息系统项目管理师 报名、考试、查分时间动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

Spark内存管理

Spark内存管理

spark的一大特性就是基于内存计算,Driver只保存任务的宏观性的元数据,数据量较小,且在执行过程中基本不变,不做重点分析,而真正的计算任务Task分布在各个Executor中,其中的内存数据量大,且会随着计算的进行会发生实时变化,所以Executor的内存管理才分析的重点。

2、在执行Spark应用程序时,集群会启动Driver和Executor两种JVM进程,前者为主控进程,负责创建spark上下文(context),提交spark作业(job),将作业转化为计算任务(task),在各个Executor进程间协调任务的调度。后者负责在工作节点上执行具体任务,并将结果返回给Driver,同时为需要持久化的RDD提供存储功能。

3、作为一个JVM进程,Executor的内存管理时基于JVM内存管理机制的,spark对JVM-on-heap内存进行了更为详细的规划,以充分利用。同时spark还引入了off-heap内存,使之可以直接从运行节点的系统内存中开辟空间,进一步优化内存的使用。
【堆内存的分配和回收完全依赖JVM的gc机制,应用不能灵活的操作内存,使用堆外内存则可以通过OS来分配和释放,较为灵活】

早期静态内存管理:on-heap分为四个区域,分别是Storage(20%)、Execution(60%)、Other(20%)、Ext,Storage用于缓存持久化的RDD数据和广播变量等,Execution用于缓存shuffle过程中产生的中间数据,Other区用于存储运行中的其他对象,Ext是一块较小的预留空间,用以防止OOM的发生,起到兜底作用,几个区块间有严格的界限,不可逾越。off-heap分为两个区,Storage(50%)、Execution(50%),也有严格界限,不可逾越。
spark1.6后引入统一内存管理:与静态管理机制的不同在于初始Storage(50%)、Execution(50%),在执行过程中两个区域可以根据自己和对方的内粗余量弹性的越界分配,更加灵活高效。off-heap也是两个区域,没有严格界限可以动态占用。

4、内存的动态占用:
0.存储 < 50% && 执行 < 50%:互不占用
1.存储 > 50% && 执行 > 50%:溢写磁盘(前提是缓存级别包含磁盘,若级别为纯内存则丢弃数据)
2.存储 > 50% && 执行 < 50%:存储跨界借用,若一段时间后执行内存不足,则删除被借用内存,优先满足执行的内存需要。
3.存储 < 50% && 执行 > 50%:执行跨界借用,若一段时间后存储内存不足,则不能被执行占用的存储区内存,因为执行的优先级更高,要优先保证执行数据。
***
5、统一内存管理机制,有效的提高了堆内存和堆外内存的使用效率,降低了使用复杂度,但是并不能就此高枕无忧。由于RDD数据往往是长期生存的,如果存储在内存中的数据过多,会引发频繁的full-gc,降低了程序的吞吐量。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

Spark内存管理

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

Spark内存管理

1、spark的一大特性就是基于内存计算,Driver只保存任务的宏观性的元数据,数据量较小,且在执行过程中基本不变,不做重点分析,而真正的计算任务Task分布在各个Executor中,其中的内存数据量大,且会随着计算的进行会发生实时变化,所以Executor
Spark内存管理
2019-06-05

Spark在Ubuntu上的内存管理优化

在Ubuntu上使用Apache Spark时,内存管理是一个关键的性能考量因素。以下是一些优化Spark内存管理的建议:调整Spark配置参数:spark.executor.memory:控制每个执行器(executor)的内存量。sp
Spark在Ubuntu上的内存管理优化
2024-10-22

Spark中的Executor内存管理是如何进行的

在Spark中,Executor内存管理是由Spark的内存管理器负责管理的。每个Executor会有自己的内存管理器来管理其内存,包括用于存储数据和执行任务的内存。内存管理器会根据任务的需求动态分配和释放内存,并在需要时调整内存分配的大小
Spark中的Executor内存管理是如何进行的
2024-03-05

如何解析Apache Spark 统一内存管理模型

今天就跟大家聊聊有关如何解析Apache Spark 统一内存管理模型,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Apache Spark 统一内存管理模型详解下面将对 Spark
2023-06-02

内存管理两部曲之虚拟内存管理

所谓逻辑扩充,就是说实际上物理内存的容量没有发生改变,但是它能装的东西却变多了,使得用户看来似乎有一个比实际内存大得多的内存。

Spark内存调优指南

这篇文章主要为大家介绍了Spark内存调优指南数据序列化分析详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
2023-03-07

理解Linux内存管理:分配、释放和管理内存

Linux内存管理负责分配、释放和管理内存资源,采用虚拟内存和分页机制来实现,提供了丰富的内存分配和释放函数。
Linux内存2024-11-30

C++ 内存管理中的内存池

内存池是一种 c++++ 技术,用于管理频繁分配和释放的特定大小对象。它使用预分配的内存块,提供比标准内存分配器更高的性能,特别是针对高度并发的应用程序。C++ 内存管理中的内存池内存池是一种用于优化内存分配和管理的 C++ 技术。它为频
C++ 内存管理中的内存池
2024-05-01

JVM内存管理之JAVA语言的内存管理详解

引言内存管理一直是JAVA语言自豪与骄傲的资本,它让JAVA程序员基本上可以彻底忽略与内存管理相关的细节,只专注于业务逻辑。不过世界上不存在十全十美的好事,在带来了便利的同时,也因此引入了很多令人抓狂的内存溢出和泄露的问题。可怕的事情还不只
2023-05-31

Python的内存管理

一直以为用Python、java这样的语言就不在需要关心内存使用的问题,但事情还是发生了。    前一段时间需要写一个应用,需要将用户删除的记录在文件中的偏移记录到另一个文件中,由于需要load的最大的数据文件也就1.2GB左右,而且系统的
2023-01-31

Python内存管理的原理

这篇文章主要介绍“Python内存管理的原理”,在日常操作中,相信很多人在Python内存管理的原理问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Python内存管理的原理”的疑惑有所帮助!接下来,请跟着小编
2023-06-15

如何有效处理 FaissJava 的内存管理?(如何处理FaissJava内存管理)

在Java开发中,Faiss是一个强大的向量相似性搜索库。然而,对于FaissJava的内存管理,许多开发者可能会感到困惑和棘手。本文将详细介绍如何处理FaissJava的内存管理,帮助开发者更好地利用这个库。一、了解FaissJava的内存管
如何有效处理 FaissJava 的内存管理?(如何处理FaissJava内存管理)
Java2024-12-22

Python内存管理机制

1 概述对于Python这样的动态语言,如何高效的管理内存,是很重要的一部分,在很大程度上决定了Python的执行效率。与大多数编程语言不同,Python中的变量无需事先申明,变量无需指定类型,程序员无需关心内存管理,Python解释器给你
2023-01-31

JavaScript 如何管理内存

最近有很多同学在面试中都被问到了 JS在浏览器中的内存管理逻辑,JS 的内存管理本质上是一个非常复杂知识点。所以咱们今天就专门花上几分钟的时间,来看看 JS在浏览器中的内存管理逻辑。

聊聊JavaScript内存管理

大多数时候,我们在不了解有关内存管理的知识下也只开发,因为 JS 引擎会为我们处理这个问题。不过,有时候我们会遇到内存泄漏之类的问题,这个只有知道内存分配是怎样工作的,我们才能解决这些问题。

Python内存管理介绍

Python是一门动态的、一切皆对象的语言,这些内存申请可能会产生大量小的内存,为了加快内存操作和减少内存碎片化,使用Python自己的内存管理器,叫PyMalloc。

探讨Android内存管理

前言 在看这篇文章之前,需要Linux内存管理基础,推荐先学习一些Linux内存管理基础知识点,这里我们在做一些应用层的优化工作,但从底层理解一些原理性的知识点,对我们有较大帮助。 主要讨论四点内容: Android 内存管理机制 如何评估
2022-06-06

编程热搜

目录