Spark静态内存管理:StaticMemoryManager

MemoryManager将堆空间静态分区为不相交的区域。分别通过spark.shuffle.memoryFractionspark.storage.memoryFraction来确定执行和存储区域的大小 。这两个区域是完全分离的,使得两者都不能从另一个借用内存。

例如Executor的可用Heap大小是10G,实际上Spark只能使用90%,也就是9G的大小,是由spark.storage.safetyFraction来控制。
Spark1.6.X以前JVM到底可以缓存多少数据?
(1)单个Executor的Cache数据量计算公式: Heap Size * spark.storage.safetyFraction * spark.storage.memoryFraction
(2)单个Executor的角度来讲:Heap Size * 90% * 60% = HeapSize * 54%,如果Executor大小是10G的话,从理论上讲单个Executor可以缓存的数据大小是5.4G,关于缓存大小的控制参数由spark.stroage.safetyFraction和spark.stroage.memoryFraction共同决定。
(3)如果是100个Executors的话,每个的Heap是10G,那么理论上讲可以缓存540G的数据,普通规模的计算基本都可以满足。
Spark1.6.X以前ShuffleHeap占用大小计算??
(1)计算公式:Heap Size * spark.stroage.safetyFraction *spark.shuffle.memoryFraction * spark.shuffle.safetyFraction默认情况下是Heap Size * 14.4%。
(2)单个Executor的角度来讲:整个Heap大小(Heap Size) * spark.storage.safetyFraction(安全存储的大小默认90%) * Spark.shuffle.memoryFraction(20%)Spark.shuffle.safetyFraction(可用安全阈值80%)默认情况下是Heap size * 14.4%,如果Executor大小是10G的话,理论上讲单个Executor Shuffle可用大小为1.44G。
Unroll占用空间计算及对缓存数据影响是什么??
(1)计算公式:Heap Size * spark.stroage.safetyFraction * spark.stroage.memoryFraction* spark.storage.unrollFraction。默认情况下是:HeapSize *10.8%。
(2)对Cache数据影响:由于Unroll是一个优先级高的操作,进行Unroll操作的时候回占用Cache的空间,即可以挤掉缓存中的数据(如果该数据的级别是MemoryOnly的话,则该数据就会丢失)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值