大数据计算框架Spark内存模型

发布者:上海IT外包来源:http://www.lanmon.net点击数:817

Executor端的内存模型,包括堆内存和堆外内存。
大数据计算框架Spark内存模型
存储管理界面(MemoryManager)
Spark为执行内存和存储内存管理提供了统一的界面:MemoryManager。
在MemoryManager的具体实现中,Spark 1.6默认为Unified Memory Manager。 1.6之前使用的静态内存管理模式仍然保留。可以通过配置spark.memory.useLegacyMode参数来启用它。
1静态内存管理(静态内存管理器)
堆空间管理
在Spark应用程序的操作期间,存储内存,执行内存和其他内存的大小是固定的,但可以在应用程序启动之前进行配置。
可用的执行内存和可用的存储内存计算公式:
可用的执行内存=systemMaxMemory * spark.shuffle.memoryFraction * spark.shuffle.safetyFraction
可用存储内存=systemMaxMemory * spark.storage.memoryFraction * spark.storage.safetyFraction
systemMaxMemory取决于当前JVM堆中的内存大小。公式中的两个safetyFraction参数意味着逻辑上保留安全区域以降低由于实际内存超过当前预设范围而导致OOM的风险。此逻辑保留区域也由JVM管理。
大数据计算框架Spark内存模型
图静态内存管理 - 堆内的内存分配
堆外空间管理
堆外只有执行内存和存储内存。它们的大小由spark.memory.storageFraction参数决定。由于可以精确地计算堆存储器占用的空间,因此不需要设置保险区域。大数据计算框架Spark内存模型
静态内存管理 - 分配堆外内存
2统一内存管理
Spark 1.6引入的统一内存管理机制与静态内存管理不同,存储内存和执行内存共享相同的空间,可以动态占用对方的空闲区域。
堆内存
堆中的内存区域大致可分为以下四类:
1)执行内存:主要用于在Shuffle,Join,Sort,Aggregation等计算过程中存储临时数据。
2)存储内存:主要用于缓存和传播内部数据
3)其他:用户数据结构,Spark内部元数据。
4)保留存储器:系统保留存储器。默认值为300MB。
大数据计算框架Spark内存模型
堆内存(堆外内存)
Spark 1.6开始引入堆外内存(详见SPARK-11389)。此模式不适用于JVM中的内存。相反,它调用Java不安全API(例如C语言中的malloc())直接从操作系统请求内存。 JVM不管理这部分内存,因此您可以避免频繁的GC,但您必须自己编写。内存应用和发布的逻辑。
有两种类型的堆外内存:执行内存和存储内存。
默认情况下,未启用堆内存。您可以通过配置spark.memory.offHeap.enabled参数来启用它。通过配置spark.memory.offHeap.size参数来设置堆内存的大小。
如果启用了堆外内存,则Executor中将存在堆内和堆外内存。 Executor中的Execution内存是堆中的Execution内存和堆外的Execution内存的总和。同样,存储内存也是一样的。
大数据计算框架Spark内存模型
描述
maxOffHeapMemory=spark.memory.offHeap.size
执行内存和存储内存动态调整
1)设置基本存储内存和执行内存区域(比率由spark.storage.storageFraction设置,默认值为0.5,即每个的一半)2)当存储内存和执行内存不足时,将其存储到硬盘中;如果空间不足而另一方是自由的,你可以借用另一方的空间; (存储空间不足不足以放下一个完整的块)
3)执行内存空间被另一方占用,允许另一方将占用的部分转移到硬盘,然后“返回”借来的空间
4)在存储存储空间被另一方占用后,另一方不能“返回”,因为它实现起来更复杂。
大数据计算框架Spark内存模型
IT外包
>
400-635-8089
立即
咨询
电话咨询
服务热线
400-635-8089
微信咨询
微信咨询
微信咨询
公众号
公众号
公众号
返回顶部