【前言】
在《DN的持久化文件》一文中介绍了dn持久化文件以及对应的目录结构,那么在dn的内部实现中,又是怎样将这些数据结构串联起来的呢?文本就来介绍dn存储实现的相关内容。
【数据结构】
在讲解内部实现前,我们再回顾下dn持久化文件几个重要的点:
dn可以配置多个目录进行数据块的存储
每个这样的目录中,都会有一个或多个BP目录(BlockPool,后面均简称为BP)
每个BP下存放各自正在写的,已经写完的block文件,以及block的meta文件
block数据块在nn(namenode)中称为block,在dn中称为replica,叫法不同而已。
在dn的实现中,磁盘目录用卷(volume)的概念进行描述,与之对应的是FsVolumeSpi接口和FsVolumeImpl实现类。也就是说配置文件中每个指定的目录,都有一个对应的FsVolumeImpl实例对象。
FsVolume中包含一个BlockPoolSlice的字典,记录该目录下的所有BP信息,即一个BlockPoolSlice对应于一个BP。在BlockPoolSlice中,又以不同的字段分别记录了current、tmp、rbw、finalized等目录的位置。
所有的F