在HDFS中,有三个重要节点:
- NameNode的作用是维护和管理Fsimage和EditLog,进而实现对文件系统树和树下的所有目录以及文件的维护
- SecondaryNameNode的作用是为namenode创建检查点的同时自身保留一份数据, 也就是namenode的备份节点 , 以便于namenode后期的数据恢复
- DataNode用来存储和执行数据,并定期向namenode汇报自身所有的block
Fsimage与EditLog的合并过程:
- SecondaryNamenode通过周期性(五分钟)以GetEditLog方法来获取EditLog的文件大小, 当大小满足合并时, 通过RollEditLog方法进行合并
- Namenode停止使用EditLog,并生成临时节点Edit.new文件
- SecondaryNamenode 通过namenode内建的Http服务器 , 以Get方式获取namenode的Fsimage和EditLog文件(Get方法带有携带者Fsimage和EditLog路径)
- SecondaryNamenode 载入Fsimage,并按照EditLog文件内容注意执行操作
- 当更新写入操作完毕后 , 通过Http请求方式告诉namenode合并完成 ,这时namenode会通过Http get方式获取新的Fsimage文件
- namenode中的检查节点更新时间随之变化, 更改文件名为Fsimage文件
- namenode还将Edit.new文件名更改为Edit
整体来看,namenode,secondarynamenode,datanode三者各自的职责与相互协调的运作方式:
namenode用来维护自身存储的所有目录和文件,同时数据更新操作实时进行,
secondarynamenode与之配合,尽量保证服务器在宕机的情况下能够完成重启后数据的快速恢复 , 减少因为意外情况导致的数据丢失.
datanode则是树下的一个操作运转存储的数据节点 , 不定时的向namenode汇报自身block数量,内容的变化 ,
来辅助EditLog操作指令对Fsimage更新的进程.