|NO.Z.00103|——————————|BigDataEnd|——|Hadoop&Spark.V01|——|Spark.v01|Spark 原理 源码|内存管理&堆内内存与堆外内存|

一、内存管理
### --- 内存管理

~~~     在执行 Spark 的应用程序时,Spark 集群会启动 Driver 和 Executor 两种 JVM 进程:
~~~     Driver为主控进程,负责创建 Spark 上下文,提交 Spark 作业,将作业转化为 Task,
~~~     并在各个 Executor 进程间协调任务的调度
~~~     Executor负责在工作节点上执行具体的计算任务,并将结果返回给 Driver,
~~~     同时为需要持久化的 RDD 提供存储功能
~~~     Driver 的内存管理(缺省值 1G)相对来说较为简单,
~~~     这里主要针对 Executor 的内存管理进行分析,下文中提到的Spark 内存均特指 Executor 的内存。
二、堆内内存与堆外内存
### --- 堆内内存与堆外内存
### --- 堆内内存与堆外内存架构说明

~~~     作为一个 JVM 进程,Executor 的内存管理建立在 JVM 的内存管理之上,
~~~     Spark 对JVM 的堆内(On-heap)空间进行了更为详细的分配,以充分利用内存。
~~~     同时,Spark 引入了堆外(Off-heap)内存,使之可以直接在工作节点的系统内存中开辟空间,
~~~     进一步优化了内存的使用。
~~~     堆内内存受到 JVM 统一管理,堆外内存是直接向操作系统进行内存的申请和释放。
三、堆内内存
### --- 堆内内存

~~~     堆内内存的大小,
~~~     由 Spark 应用程序启动时的 executor-memory 或 spark.executor.memory 参数配置。
~~~     Executor内运行的并发任务共享 JVM 堆内内存。
~~~     缓存 RDD 数据和广播变量占用的内存被规划为存储内存
~~~     执行 Shuffle 时占用的内存被规划为执行内存
~~~     Spark 内部的对象实例,或者用户定义的 Spark 应用程序中的对象实例,均占用剩余的空间
~~~     Spark 对堆内内存的管理是一种逻辑上 ”规划式” 的管理,
~~~     因为对象实例占用内存的申请和释放都由 JVM 完成,Spark只能在申请后和释放前记录这些内存。
~~~     虽然不能精准控制堆内内存的申请和释放,
~~~     但 Spark 通过对存储内存和执行内存各自独立的规划管理,
~~~     可以决定是否要在存储内存里缓存新的 RDD,以及是否为新的任务分配执行内存,
~~~     在一定程度上可以提升内存的利用率,减少异常的出现。
四、堆外内存
### --- 堆外内存

~~~     为了进一步优化内存的使用以及提高 Shuffle 时排序的效率,
~~~     Spark 引入了堆外(Off-heap)内存,使之可以直接在工作节点的系统内存中开辟空间,
~~~     存储经过序列化的二进制数据。
~~~     堆外内存意味着把内存对象分配在 Java 虚拟机的堆以外的内存,这些内存直接受操作系统管理。
~~~     这样做的结果就是能保持一个较小的堆,以减少垃圾收集对应用的影响。
~~~     利用 JDK Unsafe API,Spark 可以直接操作系统堆外内存,减少了不必要的内存开销,
~~~     以及频繁的 GC 扫描和回收,提升了处理性能。
~~~     堆外内存可以被精确地申请和释放(堆外内存之所以能够被精确的申请和释放,
~~~     是由于内存的申请和释放不再通过 JVM 机制,而是直接向操作系统申请,
~~~     JVM 对于内存的清理是无法准确指定时间点的,因此无法实现精确的释放),
~~~     而且序列化的数据占用的空间可以被精确计算,所以相比堆内内存来说降低了管理的难度,
~~~     也降低了误差。
~~~     在默认情况下堆外内存并不启用,可通过配置 spark.memory.offHeap.enabled 参数启用,
~~~     并由spark.memory.offHeap.size 参数设定堆外空间的大小。
~~~     除了没有 other 空间,堆外内存与堆内内存的划分方式相同,
~~~     所有运行中的并发任务共享 存储内存 和 执行内存 。

 
 
 
 
 
 
 
 
 

Walter Savage Landor:strove with none,for none was worth my strife.Nature I loved and, next to Nature, Art:I warm'd both hands before the fire of life.It sinks, and I am ready to depart
                                                                                                                                                   ——W.S.Landor

 

 

posted on   yanqi_vip  阅读(21)  评论(0编辑  收藏  举报

相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

导航

统计

点击右上角即可分享
微信分享提示