Content #
存储系统的服务对象有 3 个:
- Shuffle 中间文件
- RDD Cache
- 广播变量
BlockManager 的职责,正是在 Executors 中管理这 3 类数据的存储、读写与收发。就存储介质来说,这 3 类数据所消耗的硬件资源各不相同。
具体来说,Shuffle 中间文件消耗的是节点磁盘,而广播变量主要占用节点的内存空间,RDD Cache 则是“脚踏两条船”,既可以消耗内存,也可以消耗磁盘。
不管是在内存、还是在磁盘,这些数据都是以数据块(Blocks)为粒度进行存取与访问的。数据块的概念与 RDD 数据分区(Partitions)是一致的,在 RDD 的上下文中,说到数据划分的粒度,我们往往把一份数据称作“数据分区”。而在存储系统的上下文中,对于细分的一份数据,我们称之为数据块。
有了数据块的概念,我们就可以进一步细化 BlockManager 的职责。 BlockManager 的核心职责,在于管理数据块的元数据(Meta data),这些元数据记录并维护数据块的地址、位置、尺寸以及状态。为了让你直观地感受一下元数据,我把它的样例放到了下面的示意图里,你可以看一看。
只有借助元数据,BlockManager 才有可能高效地完成数据的存与取、收与发。