Hadoop1.x Secondary NameNode的作用

Secondary NameNodeHadoop中命名不当的其中一个组件。不当命名很容易造成歧义,通过Secondary NameNode这个名字,我们很容易理解为是一个备份NameNode,但实际上它不是。很多Hadoop的初学者对Secondary NameNode究竟做了什么以及为什么存在于HDFS中感到困惑。因此,在这篇博文中,我试图解释HDFSSecondary NameNode的作用。

通过它的名字,你可能会认为它和NameNode有关,它确实是NameNode相关。所以在我们深入研究Secondary NameNode之前,让我们看看NameNode究竟做了什么。

1. NameNode

NameNode保存HDFS的元数据,如名称空间信息,块信息等。使用时,所有这些信息都存储在主存储器中。 但是这些信息也存储在磁盘中用于持久性存储。

上图显示了NameNode如何将信息存储在磁盘中。上图中两个不同的文件是:

  • fsimage - 它是NameNode启动时文件系统元数据的快照
  • 编辑日志 - 它是在NameNode启动之后对文件系统进行更改的序列

只有在重新启动NameNode时,编辑日志才会合并到fsimage以获取文件系统元数据的最新快照。但是在线上集群上,NameNode重启并不是很常见,这就意味对于NameNode长时间运行的集群来说编辑日志可能会变得非常大(可能会无限增长)。在这种情况下我们会遇到以下问题:

  • 编辑日志变得非常大,对于管理来说是一个挑战
  • NameNode重启需要很长时间,因为很多更改需要合并(译者注:需要恢复编辑日志中的各项操作,导致NameNode重启会比较慢)
  • 在崩溃的情况下,我们将丢失大量的元数据,因为fsimage是比较旧的(译者注:生成最新fsimage之后的各项操作都保存在编辑日志中,而不是fsimage,还未合并)

所以为了解决这个问题,我们需要一个机制来帮助我们减少编辑日志的大小,并且得到一个最新的fsimage,这样NameNode上的负载就会降低一些。这与Windows恢复点非常相似,它可以让我们获得操作系统的快照,以便在出现问题时退回到上一个恢复点。

现在我们理解了NameNode的功能,以及保持最新元数据的挑战。所以这一切都与Seconadary NameNode有关?

2. Seconadary NameNode

通过Secondary NameNode实现编辑日志与fsimage的合来解决上述问题。

上图显示了Secondary NameNode的工作原理:

  • 它定期从NameNode获取编辑日志,并与fsimage合并成新的fsimage
  • 一旦生成新的fsimage,就会复制回NameNode
  • NameNode下次重新启动时将使用这个fsimage进行重新启动,从而减少启动时间

Secondary NameNode的整个目的就是在HDFS中提供一个检查点。它只是NameNode的一个帮助节点。这也是它在社区内被认为是检查点节点的原因。

所以我们现在明白所有的Secondary NameNode都会在文件系统中设置一个检查点,这将有助于NameNode更好地运行。它不可以替换NameNode或也不是NameNode的备份。所以从现在开始习惯把它叫做检查点节点。

原文:http://blog.madhukaraphatak.com/secondary-namenode---what-it-really-do/

您的支持将是我继续写作的动力!