spark 存储管理

来源:互联网 发布:mac系统软件卸载 编辑:程序博客网 时间:2024/06/05 03:25

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方式存储。

 

0 0