Spark如何使用内存
Spark对内存划分为四个区域,分别是Reserved Memory、User Memory、Execution Memory和Storage Memory.
Reserved Memory是Spark预留的,存储自身内部对象,固定为300MB
User Memory是存储开发者自定义的数据结构,比如RDD牌子中引用的数组、列表、映射等
Execution Memory用来执行分布式任务。分布式任务的计算,主要包括数据的转换、过滤、映射、排序、聚合、归并等环节
Storage Memory是用于缓存分布式数据庥,例如RDD Cache、广播变量等
Execution Memory和Storage Memory可以相互转化,而抢占规则有3条:
1.如果对方的内在空间空闲,双方可以互相抢占
2.对于Storage Memory抢占Execution Memory的内存部分,当分布式任务有需要时,Storage Memory涉及的缓存数据要么落盘、要么清除,达到立即归还抢占的内存给Execution Memory
3.对于Execution Memory抢占的Storage Memory部分,即使Storage Memory有收回的需要,但也要等分布式任务执行完毕才能归还
总的来说,Execution Memory是老大,我有需要,Storage Memory必须归还抢占部分