内容简介:Spark 由 Scala/Java 编写的,Spark 的 Driver 和 Executor 是运行在集群中的 JVM 进程,内存管理基于 JVM。在 JVM 堆上分配的内存,在 GC 范围内。Driver 堆内存通过
Spark 由 Scala/Java 编写的,Spark 的 Driver 和 Executor 是运行在集群中的 JVM 进程,内存管理基于 JVM。
堆内存和堆外内存
堆内存
在 JVM 堆上分配的内存,在 GC 范围内。
Driver 堆内存通过 --driver-memory
或 spark.driver.memory
指定,默认 1GB 大小。
Executor 堆内存通过 --executor-memory
或 spark.executor.memory
指定,默认 1GB 大小。
堆外内存
在 JVM 之外分配的内存,不在 GC 范围内。
Driver 堆外内存通过 spark.driver.memoryOverhead
指定,默认为 Driver 堆内存的 0.1 倍,最小 384 MB。
Executor 堆外内存通过 spark.executor.memoryOverhead
指定,默认为 Executor 堆内存的 0.1 倍,最小 384 MB。
Driver 内存大小等于, spark.driver.memory
与 spark.driver.memoryOverhead
之和。
Driver 内存大小等于, spark.driver.memory
与 spark.driver.memoryOverhead
之和。
统一内存管理
在 Spark 1.6 版本之后,作为 Tungsten 计划中的一部分,提供了统一内存管理(Unified Memory Manager)替换之前的静态内存管理(Static Memory Manager)管理内存。
保留内存
保留内存(Reserved Memory)为系统保留内存,大小硬编码为 300MB。
用户内存
用户内存(User Memory)用于存储 RDD 转换(例如,mapPartition 等)用户自定义数据结构,大小为:
(Java Heap - Reserved Memory) * (1.0 - spark.memory.fraction)
配置 spark.memory.fraction
默认值为 0.6。
Spark 内存
Spark 内存分为两部分:
- 存储内存(Storage Memory)用于存储缓存数据、广播变量和序列化数据“展开(Unroll)”临时数据。
- 执行内存(Execution Memory)用于任务执行对象存储。
默认,存储内存的大小为:
(Java Heap - Reserved Memory) * spark.memory.fraction * spark.memory.storageFraction
配置 spark.memory.fraction
默认值为 0.6。
配置 spark.memory.storageFraction
默认值为 0.5。
存储内存和执行内存之间并不是一个严格的边界,统一内存管理器提供了动态占用机制,规则如下:
- 若对方有空余空间,可占用对方空余空间;
- 执行内存可以驱逐存储内存占用的原本属于执行内存的空间;
- 存储内存不可以驱逐执行内存占用的原本属于存储内存的空间。
执行内存,就是这么霸道!!!
Tips
缓存密集型应用,可以适当提高 spark.memory.storageFraction
,增加存储内存的占比。
Shuffle 密集型应用,可以适当降低 spark.memory.storageFraction
,增加执行内存的占比。
使用 Dataset.persist(StorageLevel.MEMORY_AND_DISK)
替代 Dataset.cache()
可以在存储空间不足时,让缓存数据落盘。
参考
以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网
猜你喜欢:- Go 语言内存管理(二):Go 内存管理
- Objective-C的内存管理(1)——内存管理概述
- [译] 图解 Go 内存管理与内存清理
- 图解 Go 内存管理器的内存分配策略
- Go:内存管理分配
- Redis内存管理
本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们。
Unity 3D游戏开发(第2版)
宣雨松 / 人民邮电出版社 / 2018-9 / 89.00元
Unity 是一款市场占有率非常高的商业游戏引擎,横跨25 个主流游戏平台。本书基于Unity 2018,结合2D 游戏开发和3D 游戏开发的案例,详细介绍了它的方方面面,内容涉及编辑器、游戏脚本、UGUI 游戏界面、动画系统、持久化数据、静态对象、多媒体、资源加载与优化、自动化与打包等。 本书适合初学者或者有一定基础的开发者阅读。一起来看看 《Unity 3D游戏开发(第2版)》 这本书的介绍吧!