首先我们确定,namenode是由fsimage和edits组成的
超详细的namenode元数据的操作!!!
- fsimage是存储元数据的,这是存储在节点的磁盘上的
- edits是存储client对hadoop集群的各种操作的日志文件,这是跟fsimage不一样的,我们要区分开
- namenode在内存中存在一块区域用来存放edits中存入的元数据和fsimage的元数据(这么看来fsimage像是一个元数据的镜像,主要是为了防止集群断电导致的内存中的元数据丢失)
- 当edits(空间比较小)快写满的时候,我们要进行edits文件的fsimage的合并操作,也就是更新fsimage
- 这个时候就会有secondarynode的作用,他会下载fsimage和edits,然后进行checkpoint操作,将edits的格式转换并和fsimage的合并,形成新的文件fsimage.chkpoint,然后上传到namenode中
- 在进行更新合并的操作时,namenode中仍要不断存储客户端的一系列操作,这个时候就会建立一个edits new文件,来代替edits文件存储客户端的一系列操作(edits 文件已经暂停)
- namenode中接收到fsimage.chkpoint后,将文件中的fsimage删除,并且将fsmage.chkpoint文件重命名为fsimage,同时将edits new文件重命名为edits,然后继续集群的运行