hdfs的NameNode学习
NameNode的文件结构包括VERSION、edits、fsimage、fstime文件目录
其中dfs.name.dir属性对应的目录列表中可查看到:
1.VERSION文件是JAVA属性文件,其中包含运行HDFS的版本信息。包含内容
namespaceID是文件系统的唯一标识符,当文件系统第一次格式化时,便会被创建,这个标识符是必须跟各DataNode和NameNode保持一致。NameNode会使用它识别新的DataNode,DataNode只有在向NameNode注册后才会获得此namespaceID。
cTime属性标记了NameNode存储空间创建的时间。对于新格式化的,这里时间为0,只要文件系统被更新,就会更新到一个新的时间戳上。
StorageType指出此存储目录包含一个NameNode的数据结构,在DataNode中它的属性值为DATA_NODE,在DataNode中它的属性值为NAME_NODE。
LayoutVersion是一个负的整数,定义了HDFS持久数据结构的版本。各节点的版本号要一致。
2.edits编辑日志(edit log)
(1)编辑日志中会在NameNode上记录客户执行事件,并在内存中保存一个文件系统元数据,这个描述符在编辑日志有了改动后更新,内存中的元数据用来提供读数据请求服务。
(2)编辑日志会在每次成功操作之后,且成功代码尚未返回给客户端之前进行刷新和同步。对于要写入多个目录的操作,写入流要刷新和同步到所有的副本上,保证操作不会因为故障而丢失数据。
3.fsimage文件系统映像(filesystem image)
fsimage文件中包含以序列化格式存储的文件系统目录和文件inodes.每个inodes表征一个文件或目录的元数据信息,以及文件的副本数、修改和访问时间等信息。
fsimage文件是文件系统元数据的持久性检查点,和编辑日志不同,它不会在每个文件系统写操作后进行更新; 元数据的最新状态可以通过从磁盘中读取fsimage文件加载到内存中来进行重建恢复,然后进行编辑日志中的操作(NameNode启动时也做的事情)