NameNode.java: 主要维护文件系统的名字空间和文件的元数据,以下是代码中的说明。
FSNamesystem.java:
主要维护几个表的信息:维护了文件名与block列表的映射关系;有效的block的集合;block与节点列表的映射关系;节点与block列表的映射关系;更新的heatbeat节点的LRU cache
INode.java:
HDFS将文件和文件目录抽象成INode。
FSImage.java:
需要将INode信息持久化到磁盘上FSImage上。
FSEditLog.java:写Edits文件
BlockInfo.java:INode主要是所文件和目录信息的,而对于文件的内容来说,这是用block描述的。我们假设一个文件的长度大小为Size,那么从文件的0偏移开始,按照固定大小,顺序对文件划分并编号,划分好的每一块为一个block
DatanodeDescriptor.java:代表的具体的存储对象。
FSDirectory.java: 代表了HDFS中的所有目录和结构属性
EditLogOutputStream.java:所有的日志记录都是通过EditLogOutputStream输出,在具体实例化的时候,这一组EditLogOutputStream包含多个EditLogFIleOutputStream和一个EditLogBackupOutputStream
EditLogFileOutputStream.java:
将日志记录写到edits或edits.new中。
EditLogBackupOutputStream.java:将日志通过网络发送到backupnode上。
BackupNode.java:name Node的backup:升级阶段:Secondary Name Node -》Checkpoint Node(定期保存元数据,定期checkpoint) -》Backup Node(在内存中保持一份和Name Node完全一致的镜像,当元数据发生变化时,其元数据进行更新,可以利用自身的镜像来checkpoint,无需从nameNode下载)-》Standby Node(可以进行热备)
BackupStorage.java:在Backup Node备份目录下创建jspool,并创建edits.new,将输出流指向edits.new
TransferFsImage.java:负责从name Node去文件。
GetImageServlet.java:是httpServlet的子类,处理doGet请求。