一、spark内存简介
spark 2.0后,基本上spark内存的管理就已经自动化了,内存出现问题基本上是一些数据问题。比如数据倾斜
- spark.executor.memory是绝对值,指定了executor进程的JVM Heap总大小
- spark.memory.fraction是比例值,标记spark处理分布式数据集的内存总大小
- spark.memory.storageFraction(默认0.5)也是比例值,进一步划分Execution
Memory和Storage Memory的大小 - Storage Memory:用于缓存数据,当一个RDD被引用多次时,就可以考虑对其进行Cache,从而提升作业的执行效率
- Execution Memory:用于缓存在执行shuffle过程中产生的中间数据
- User Memory: 用户自定义的数据结构或Spark内部元数据
- Reserved Memory:预留内存,固定300M
二、堆内内存 or 堆外内存?
在管理方式上,spark会分为堆内内存(On-Heap Memory)和堆外内存(Off-Heap Memory),上述说的是堆内内存
1、堆外内存