《大数据处理框架 Apache Spark设计与实现》—— 存储相关

注:文中图片引自书中

存储有涉及到的内容分为三个模块:内存管理、缓存机制、checkpoint机制

内存管理

各个task在jvm中共享整个存储空间,分布方式如上图所示


具体内存空间分布

除图中标注的内容外,需要注意框架执行空间和数据缓存空间之间是可以转化的,当数据缓存空间不足时可以向框架执行空间挤压,但用完后归还;当框架执行空间内存不足时也可以从缓存空间挤压,但限度时50%的总框架内存空间,挤压后不会归还。


内存和task间的关系

Shuffle时的内存情况:

1. shuffle write

  (1)无聚合无排序分区少(<=200) BypassMergeSortBufferWriter
  (2)无聚合无排序分区多(>200)   SerializedShuffleWriter 数据分页存储,不需要连续的内存空间
  (3)无聚合有排序 PairedPartitionBuffer
  (4)有聚合有排序 PartitionedAppendOnlyMap  本质是一个数组,用二次地址探测法解决hash冲突

2. shuffle read

  (1)无聚合无排序 只需要一个default 48MB的数组
  (2)无聚合有排序
  (3)有聚合有排序 AppendOnlyMap

缓存机制

需要注意的是LRU替换策略(缓存不足时)并不会替换掉同属于同一个RDD的partition,而基于双向链表的替换通过队尾插入替换队头的链表特性实现了LRU

checkpoint

通常用来做数据的HA,注意在对效率要求较高时,可采用Alluxio来做外部存储

你可能感兴趣的:(《大数据处理框架 Apache Spark设计与实现》—— 存储相关)