spark 存储管理

本文介绍了Spark的存储管理,包括数据块类型如RDD、Shuffle、广播变量和任务结果数据块,以及Spark如何处理内存和磁盘缓存。还讨论了RDD与数据块的关系,内存缓存的工作原理,磁盘缓存的实现,以及RDD的持久化选项。同时,详细阐述了shuffle数据的持久化策略和广播变量的存储方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.spark数据块block的种类有哪些?

   RDD数据块:用来标识所缓存的RDD数据。

  Shuffle数据块:用来标识持久化的shuffle数据。

  广播变量数据块:标识广播变量数据

  任务返回结果数据块:标识存储在存储管理模块内部的任务返回结果,如果通过akka返回到Driver端,会造成akka帧溢出。akka可以并发处理多客户端请求,以及不同机器节点之间的消息传递等。

  流式数据块:只用在sparkstreaming中,用来标识接收到的流式数据块。

2.RDD跟数据块的关系

  RDD的所有操作都是跨分区的,在存储管理部分,接触到的是数据块的概念,数据块是物理实体,分区是逻辑概念,在spark中,一个RDD的分区对应存储管理模块中的一个数据块,存储管理模块接触不到RDD的概念,数据块和分区之间的映射是通过名称上的约定实现的。spark为每个RDD在内部维护了独立的ID号,对于RDD的每个分区也有独立的索引号,因此找到ID号和索引号就能找到数据块。rdd_1_0  就是代表了rdd1的第0个分区的数据块。

3.spark的内存缓存是怎么做的?

  RDD默认的存储方式是内存缓存,RDD的分区数据块在存储管理模块中是以数据块名字为key,数据块内容为value的哈希表,这样能够快速索引到数据,因为缓存也是存储在内存中,就是存取速度很快。JVM默认会将内存的60%来做缓存,如果超过了,spark会丢掉或者持久化到磁盘上,这些都依赖数据块的持久化选项。即便是直接删除掉,也可以错误恢复,通过依赖关系的可回溯性,如果祖先RDD没有损坏,那么可以回溯出来。如果祖先rdd不存在了,数据就无法回溯。

4.磁盘缓存

一个数据块对应着一个磁盘临时文件,临时文件的名字关系是通过数据块的名字通过哈希算法得到的,方便查找。

5.spark的rdd的持久化选项有哪些?

 a.memory_only  只放在内存中,超出限制大小,直接删除

 b.memory_and_disk 优先放到内存中,超过大小,缓存到磁盘上

c.memory_only_ser 以序列化的方式存储到内存中

 d.memory_only_2 在内存中冗余备份一份

6.shuffle数据持久化

 在spark任务执行过程中,一个map任务会根据reduce任务的数量创建出相应的桶,桶数量是M*R  m中的一个会将数据分散到多个r中去,所以是m*r,与rdd持久化不同的是,shuffle数据的持久化都是缓存在磁盘上,一个桶就是一个数据块对应一个文件,一个数据块对应一个文件会导致文件很多,可以设置spark.shuffle.consolidateFiles为true 做文件合并,可以让多个map任务的shuffle公用同一个文件,从而减少文件数。

7.广播变量持久化

 为加速对小块数据的读取,希望这些数据在所有节点上都有一份拷贝,无需远程获取。采取memory_and_disk方式存储。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值