Hadoop的HDFS中的namenode和secondarynamenode的内容总结

       NameNode主要是用来保存HDFS的元数据信息,比如命名空间信息,块信息等等。当它运行的时候,这些信息是存在内存中的。但是这些信息也可以持久化到磁盘上:

  • fsimage:它是NameNode启动时对整个文件系统的快照。
  • edits:它是在NameNode启动后,对文件系统的改动序列。

  只有在NameNode重启时,edits才会合并到fsimage文件中,从而得到一个文件系统的最新快照。但是在生产环境集群中的NameNode是很少重启的,这意味者当NameNode运行来很长时间后,edits文件会变的很大。在这种情况下就会出现下面这些问题:

  1. edits文件会变的很大,如何去管理这个文件?
  2. NameNode的重启会花费很长的时间,因为有很多改动要合并到fsimage文件上。
  3. 如果NameNode宕掉了,那我们就丢失了很多改动,因为此时的fsimage文件时间戳比较旧。

  因此为了克服这个问题,我们需要一个易于管理的机制来帮助我们减小edits文件的大小和得到一个最新的fsimage文件,这样也会减小在NameNode上的压力。而Secondary NameNode就是为了帮助解决上述问题提出的,它的职责是合并NameNode的edits到fsimage文件中。如图所示:

Hadoop的HDFS中的namenode和secondarynamenode的内容总结

注意事项:

1. 日志文件是滚动的,一个正在写,几个已经写好的滚动;

2. checkpoint时,把正在写的滚动一下,然后把fsimage和日志文件下载到secondarynamenode上,只有第一次才会下载fsimage,这时候不会很大,以后就光下载日志文件,日志文件下载不会很大;

3. 如果namenode硬盘损坏,可以将secondarynamenode的元数据拷贝到namenode,但是secondarynamenode虽然有元数据信息,但是只能恢复大部分数据,最新更新的数据可能由于没有来得及下载到secondarynamenode,而无法全部恢复。

4.secondarynamenode虽然有元数据信息但是不能更新元数据,不能充当namenode使用。