Spark优化篇:动态内存管理

Spark内存管理分为静态内存管理和统一内存管理,Spark1.6之前使用的是静态内存管理,Spark1.6之后的版本默认使用的是统一内存管理。
 

动态内存机制图:

内存估算:

Other Memory = 自定义数据结构*每个 Executor 核数

解:Other Memory基本很简单,就是根据自定义的Map、List * executor-cores = ?



Storage Memory = 广播变量 + cache/Executor 数量

设:数据100GB、num-executors = 10、广播+cache = 1GB

解:Storage Memory : 1GB + 100GB / 10 = Executor >= 11GB



Executor Memory = 每个 Executor 核数 * (数据集大小/并行度Task)

设:数据100GB、executor-cores = 4 ,num-executors 1,并行度默认200

解:Executor Memory: 4 *(100G/(200/1)) = 2GB

动态内存占用机制:

1. 设置内存的初始值,即Execution和Storage均需设定各自的内存区域范围(默认参数0.5)

2. 若存在一方内存不足,另一方内存空余时,可占用对方内存空间

3. 双方内存均不足时,需落盘处理

4. Execution内存被占用时,Storage需将此部分转存硬盘并归还空间

5. Storage内存被占用时,Execution无需归还

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值