Namenode目录:元数据(name,permission,block,replication),没有dn的位置
当系统启动并加载fsimage完成之后(这个时候元数据都加载到内存中),dn向namenode报告自己的块列表,这个时候形成数据块->datanode列表的映射,数据块到datanode列表的映射关系在namenode内存中维护。在实际的应用中,数据块到datanode的对应关系经常用到,datanode到数据块的对应关系很少用。
NameNode作为HDFS中文件目录和文件分配的管理者,它保存的最重要信息,就是下面两个映射:
(1)文件名=>数据块(2)数据块=>DataNode列表
其中,“文件名=>数据块”保存在磁盘上,但NameNode上不保存“数据块=>DataNode列表”,该列表是通过DataNode上报建立起来的。
Namenode会定期将文件系统的命名空间(文件目录树、文件/目录元信息)保存到fsimage二进制文件中,以防止Namenode掉电或进程崩溃。但如果Namenode实时地将内存中的元数据同步到fsimage文件中,将会非常消耗资源且造成Namenode运行缓慢。所以Namenode会先将命名空间的修改操作保存在editlog文件中,当editlog达到一定的大小(bytes,由fs.checkpoint.size参数定义)或从上次保存过后一定时间段过后(sec,由fs.checkpoint.period参数定义)合并fsimage和editlog文件。Namenode就是通过这种方式来保证HDFS中元数据信息的安全性。
查看nn的镜像文件---元数据:hdfs oiv –p XML –I fsimage –o xxx oiv(offline image viewer) 离线镜像读取器
查看nn的编辑日志文件---对hdfs做的操作都记录在了编辑日志文件中
Hdfs oev –p XML –I fsedit –xxx –o xxx//oev:offline edit viewer