1 概述
HDFS是一个主从架构,其核心就是Namenode,Namenode主要作用是存储整个集群的元数据信息,包括存储文件的详细信息、每个文件的Block及副本在Datanode上的位置;Namnode还被用于协调客户端对文件的访问,记录文件的改动,以及客户端对文件的操作历史。为了节约资源,Namenode不记录客户端对HDFS中文件的查询操作。
Namenode作为HDFS中的Master,是整个系统的中枢。这就使得他必须能够及时响应各种需求,因此它里面存储的数据基本上都是存放在内存中的。但是为了保证Namenode在重启之后内存数据不丢失,Namenode实际上又在磁盘中维护了两个文件:edits.log和fsimage。
2 Namenode的启动流程
当Namenode启动的时候,会首先去指定目录下,读取两个文件edits.log和fsimage。这两个文件的作用:
- fsimage:上一次Namenode的内存快照
- edits.log:记录用户对HDFS上的文件的写操作
通过对这两个文件的解析,在根据这两个文件的就可以吧Namenode还原到上次停止服务前的内存状态,从而保证Namenode中存储数据的可靠性。原理还是比较简单的。
fsimage实际上就是对Namenode的一次内存快照,在Namenode运行过程中,每隔一段时间,就会对Namenode的内存打一次快照。我们知道,如果仅仅依靠这个快照,只能保障Namenode在重启后,恢复到历史中的某一时刻,在这之后的数据并不能恢复。因此为了解决这个问题,Namenode又维护了一个edits.log文件,每打一次快照之后