spark存储,缓存,断点模块

一. blockManager
1. driver上有BlockmanagerMaster, 负责维护各个节点上blockManager的元数据,比如block增删改等操作。
driver->DAGScheduler->blockManagerMaster->blockManagerInfo->blockStatus
blockManager创建后,先向blockManagerMaster进行注册,此时blockManagerMaster会创建其对应的blockManagerInfo。
blockManager执行数据的增删改操作,必须将blockStatus上报给blockManagerMaster。
2. blockManager有几个组件:DiskStore负责磁盘数据读写,MemoryStore负责内存数据读写,ConnectionManager负责建立BlockManager到远程其他节点的连接,BlockManagerWork负责远程其他节点的blockManager的数据读写。
二. CacheManager
CacheManager管理缓存数据,包括磁盘和内存数据,通过 blockManager操作数据。每当task执行rdd的compute方法,而 Compute 方法会调用 iterator 方法;如果rdd是之前持久过的,其StorageLevel肯定不是none,此时会用CacheManager读取持久化数据。cacheManager通过blockManager首先尝试从本地获取数据,本地没有,尝试从远程获取。如果虽然持久化过,但仍然读取不到数据,尝试读取checkpoint过的数据,如果没读到,就重新计算,计算完的数据会用blockManager持久化一次。如果之前没有对rdd持久化,会从rdd的父rdd执行算子计算rdd的partition数据。
三. checkPoint
checkPoint,设置断点,其和持久化的区别在于,持久化只是将数据保存在blockManager中,rdd的lineage依赖关系是不变的。而checkPoint会改变rdd的lineage,执行checkpoint操作后,rdd没有之前的依赖rdd,只有一个强行为其设置的checkPointRDD。其次,持久化的数据丢失的可能性更大,只是存在磁盘或者内存,而checkPoint的数据,通常保存在HDFS,高容错高可用的文件系统,数据丢失的可能性非常小。RDD.checkpoint()之后,此rdd接收RDDCheckpointData对象的管理,RDDCheckpointData对象,会checkpoint的rdd状态设置为MarkedForCheckpoint。当rdd所在的job运行结束了,会调用job中最后一个RDD的doCheckpoint方法,沿着finalRDD的lineage想上查找状态为MarkedForCheckpoint的rdd,并更改其状态为CheckpointingInPorgress。启动一个单独的job,将lineage中状态为CheckpointInProgress的RDD进行checkpoint操作,将其数据写入SparkContext.setCheckpointDir()方法设置的文件系统中。
如果rdd没有持久化,还设置的checkpoint,那么在job执行结束后,启动checkpoint job要将rdd的数据写入外部文件系统时,需要将该rdd之前的rdd重新计算一次,再将其checkpoint到外部文件系统。所以,要对checkpoint的rdd使用persist持久化操作。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值