翻译自Spark官网文档,版本:2.3.0
spark内存管理概览
Spark很大一部分内存用于storage和execution,即存储和执行任务。execution memory指的是在shuffle,join,sorts,aggregation操作中使用的内存,storage memory指的是用于整个集群缓存数据和传播中间数据的内存。
spark中storage和execution分享一个统一的区域(M),当没有execution memory被使用,storage可以占用全部可用内存,反之亦然。storage占用execution memory时且有必要时execution可以驱逐storage,直到storage memory使用量低于一个阈值(R)。也就是说R描述了一个小于M的缓存区域,绝不会被驱逐。execution占用storage memory时因为实现复杂所以storage不会驱逐execution。
spark有两个相关配置项:
1. saprk.memory.fraction,即M,默认为0.6,剩余的40%是为用户数据结构,spark内部数据,防止Out of memory准备的
2. saprk.memory.storageFraction,即R,默认为0.5。
确定内存消耗量
从这里可以了解到,从spark web ui上的Executors页面中的Storage Memory部分看到的数据是storage部分的内存。如何知道某个RDD占用多大内存空间,最直接的方法是将RDD放进缓存中,然后从spark web ui查看Storage Memory即可。