HDFS中的NameNode,Secondary Namenode和Datanode

时间:2020-01-09 10:34:31  来源:igfitidea点击:

在本文中,将详细说明HDFS组件Namenode,Datanode和Secondary Namenode的工作。

Hadoop中的Namenode

HDFS在主/从体系结构上工作。在HDFS群集中,Namenode是HDFS文件系统的主体和核心。

Namenode管理文件系统名称空间。它保留文件系统中所有文件的目录树以及有关文件和目录的元数据。

关于文件存储的元数据信息包括-完整文件名,上次访问时间,上次修改时间,访问权限,阻止文件分为,文件的复制级别等。

关于目录存储的元数据信息包括修改时间,访问权限等。

此元数据信息以两个文件的形式存储在磁盘上以进行持久存储:

  • fsimage –包含文件系统元数据的快照,并由Namenode在启动时使用。
  • 编辑日志–启动Namenode后,对文件系统所做的任何更改都会记录在编辑日志中。

除了将其持久保存在磁盘上之外,Namenode还将元数据信息保存在主内存中,以便更快地处理请求。有关已存储任何给定文件的块的数据节点的信息也保留在主存储器中。

任何需要处理任何现有文件或者要复制新文件的客户端应用程序都必须与Namenode通信。 Namenode返回一个Datanode列表,现有文件的块位于其中或者可以写入和复制新文件的块。

Hadoop中的DataNode

尽管Hadoop中的Namenode充当所有元数据的仲裁器和存储库,但它并不存储文件的实际数据。 HDFS的设计方式使用户数据永远不会流过NameNode。该文件的实际数据存储在Hadoop集群的Datanodes中。

在Namenode提供必须存储块或者必须从中读取块的Datanode列表之后,Datanode会为客户端应用程序存储或者访问文件的块。

为了使Namenode保持最新状态,Datanode定期将有关它们存储的块的信息发送给Namenode。

Hadoop中的辅助Namenode

根据名称,我们可能会认为Secondary Namenode是某种备份服务器,如果Namenode发生故障,它将开始像Namenode一样工作,但事实并非如此。辅助Namenode可以看作是Namenode的助手,它承担了Namenode的一些工作量。

辅助Namenode的作用

如前所述,Namenode将有关文件系统元数据的信息保存在两个文件fsimage和编辑日志中。

在Namenode启动时,从这两个文件中查询fsimage以获得元数据信息。 Nameode启动后,对名称空间的所有更改都记录在编辑日志中。现在这可能会导致一些问题,因为Namenode通常不会重新启动,因此编辑日志可能会变得很大。

当Namenode最终重新启动时,它必须首先查询fsimage,然后应用编辑日志中记录的所有更改,这意味着Namenode需要花费更多时间来重新启动。

因此,问题在于Namenode仅在启动期间将fsimage与编辑日志合并。这就是Secondary Namenode的帮助所在,它可以定期合并fsimage和edit日志文件,从而将编辑日志大小保持在限制范围内,并且Namenode具有合并的fsimage文件。

检查点过程的开始(辅助名称节点应开始合并过程的时间)由两个配置参数控制-

  • dfs.namenode.checkpoint.period(默认设置为1小时),指定两个连续检查点之间的最大延迟,并且
  • dfs.namenode.checkpoint.txns,默认设置为100万。这意味着如果自上一个检查点以来在编辑日志中记录了100万笔交易,则开始合并过程。

处理

  • 辅助Namenode从Namenode获取最新的fsimage并编辑日志。
  • 它将事务从编辑日志合并到fsimage,以创建新的fsimage文件。
  • 将新创建的fsimage文件复制回Namenode。

这样,Namenode会定期接收合并的fsimage文件,从而减少了Namenode的重新启动时间。

我们可以使用hdfs-site.xml中的此属性dfs.namenode.secondary.http-address指定次要Namenode。