HDFS分析(一)
这里将给出HDFS一些主要类的关系图:
NameNode后面的一些类的关系:
NameNode背后的类图:
DataNode存储相关的类图:
Block:HDFS内部以Block的形式保存数据,Block的大小比较大,默认64M。
BlockInfo:继承了Block,额外包含INodeFile信息,这个在namenode是持久化在磁盘里面的,同时包含了Block所属的DatanodeDescriptor信息以及Block的前后Block信息
BlockMap:定义了一个Map结构,是Block到BlockInfo的映射,Map的接口是自定义的轻量级接口,没有使用标准的java.util.Map接口
INode:在NameNode中表示文件的基础类
INodeFile:代表一个文件,里面包含了一系列的BlockInfo的信息
INodeFileUnderConstruction:代表有Block数据写入的InodeFile,包含了最后一个Block所属的Datanode的数据
INodeDirectory:表示一个文件目录,一个目录下面可以有数个INodeFile
INodeDirectoryWithQuota:继承于INodeDirectory,额外带有一些容量信息
StorageInfo:表示存储信息的基本类
Storage:继承了StorageInfo,具体的内容是存储在VERSION文件中,存储可以分成多个目录,每个目录可以有独立的VERSION文件,目录用StorageDirectory表示
FSImage:继承了Storage,在NameNode中使用,对应在磁盘的存储可以认为是fsimage文件
DataStorage:继承了Storage,在DataNode中使用
FSEditLog:在NameNode中使用,对应在磁盘的存储可以认为是edits文件
FSDirectory:保存了NameNode存储的状态,处理从磁盘取得或者持久化到磁盘(INodeFIle==>Block的映射)的操作,并且记录这些操作的日志
FSNamesystem:NameNode的所有文件和内存操作的封装,这些操作只在NameNode内部使用
FSDatasetInterface:DataNode底层涉及Block存储的一个接口
FSDataset:实现了FSDatasetInterface,管理Block的存储
SimulatedFSDataset:在伪分布式配置下的FSDatasetInterface实现
FSVolume:一个FSVolume对应一个DataStorage,可以认为是一个DataNode的存储目录的抽象
FSVolumeSet:FSVolume的集合,一个Datanode可以有多个FSVolume
FSDir:在HDFS中,DataNode中一个文件下面的Block数量是有限的,所以文件目录是有层次的,FSDir对应一个目录
ActiveFile代表一个正在被写入的文件;DatanodeBlockInfo封装了block的文件和FSVolume;BlockAndFile:block和block的文件关联类