NameNode主要维护两个文件:一个是fsimage,一个是editlog.
fsimage是Hadoop文件系统元数据一个永久性的检查点,包含整个HDFS文件系统的所有目录和文件的信息。对于文件包含了数据块的描述时间、修改时间、访问时间等信息;对于目录来说包含修改时间、访问控制时间(目录所属用户、所在组)
editlog文件存放的是Hadoop文件系统的所有更新操作的路径,文件系统客户端执行的所有写操作首先会被记录到edits文件中。
简单来说:
fsimage就是在某一时刻,整个HDFS的快照,就是这个时候HDFS上所有的文件和目录,分别的状态,位于哪个DataNode,各自的权限,各自的副本个数。
editlog就是客户端对HDFS所有的更新操作,比如说移动数据、删除数据等,都会记录在editlog中。
为了避免editlog不断增大,secondary namenode会周期性的合并fsimage和edits成新的fsimage,新的操作记录会写在新的editlog中。
fsimage和edits文件都是经过序列化的,在NameNode启动的时候,它将fsimage文件中的内容加载到内存中,之后再执行edits文件中的各项操作,使得内存中的元数据和实际的同步,存在内存中的元数据支持客户端的读操作。