spark core 便签

存储内存管理:RDD的持久化
1,如果持久化的级别是纯磁盘级别,直接调用BlockManager的toPut方法写入磁盘
2,持久化的级别是内存级别,此时尝试使用 UnRoll方法,尝试将数据安全的保存的内存之中,如果内存不够,就会淘汰,再将数据写入内存之中
1),淘汰: 新的block缓存到内存不足时,淘汰掉旧的block
2),落盘:如果设定存储到磁盘,那么久存储到磁盘,否则就会删除
3),淘汰规则,淘汰的都是相同的 MemoryMode(堆内或者堆外),新旧block不能属于同一个RDD(避免死循环),block不能是被读状态,遍历LinkedHashMap,按照最少使用进行淘汰
3,关于 UnRoll 方法:RDD缓存到内存之后,Partition转换成Block

                

 
 
    4,每一个 Executor的Storage模块用一个链式Map结构(LinkedHashMap)管理堆内和堆外内存所有的Block实例,并且间接的记录了内存的申请与释放
spark 内存管理:
1,Driver端,只是简单地程序,内存管理比较简单
2,Executor端:分为堆内内存与堆外内存
1),堆内内存指的是executor进程的内存,task 共享堆内内存
2),堆外内存指的是work内存(计算机内存 free -g),executor 共享堆外内存
spark 对堆内内存的管理方式:申请和释放都是jvm 进行完成的,spark(受制于JVM)只是在申请和释放之后进行记录
1,申请内存:new一个对象实例,spark保存该对象的引用,记录该对象占用的内存(采样,推算)
2,记录该对象删除的引用,记录该对象所占用的堆内内存
spark堆外内存的计算:
1,spark 可以直接的操作系统堆外内存,减少不必要的内存消耗,以便于频繁的GC扫描与回收
2,基于 jdk Unsafe API实现
3,可以使用 spark.memory.offHeap.enabled 参数启用
cache 指的是 RDD永久性的保存到内存之中:
1,cache(memory-only) 并不是绝对安全的一种形式存储数据形式
2,checkpoint(分布式文件系统) 才是安全的, 一般是cache与 memory

转载于:https://www.cnblogs.com/shi-qi/articles/10817182.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值