往期文章

HDFS简介——是什么/优缺点/适用场景 HDFS设计思想 HDFS的体系架构 集群配置之主要配置文件(hadoop-env.sh、yarn-env.sh、core-site.xml、hdfs-site.xml、mapred-site.xml…) 如何启动和关闭Hadoop集群 HDFS shell操作与管理工具 说下HDFS读文件和写文件的底层原理?

往期文章元数据Namenode和SecondaryNameNode的工作流程关于 HDFS的配置

元数据

首先明确Namenode的职责:响应客户端请求、管理元数据。所谓元数据就是文件系统目录树以及文件和 block 的对应关系。

在Namenode中,元数据有三种存储方式:

内存元数据(NameSystem)磁盘元数据镜像文件数据操作日志文件(可通过日志运算出元数据),存储在NameNode 的本地磁盘

什么意思呢?就是说,在内存中会存储当前正在使用的元数据,然后在磁盘上存储着内存元数据的镜像,称为fsimage,用于在Namenode宕掉之后和editslog编辑日志一起作用恢复元数据。

Namenode和SecondaryNameNode的工作流程

Namenode启动时,会加载fsimage和editslog到内存中,此时内存就持有最新的元数据信息。然后等待 DataNode 发送块报告,此时 NameNode 处于只读状态,这时不能进行写操作,这个过程 NameNode 处于安全模式。当 DataNode 将 block 的信息发送给 NameNode,大多数 block 处于可用状态时,NameNode 会自动退出安全模式。接着客户端如果对NameNode发送数据的增删改的请求,这些请求首先会被记录在editslog里,然后再修改内存中的元数据。

由于Edits中记录的操作会越来越多,Edits文件会越来越大,导致NameNode在启动加载Edits时会很慢,所以需要对Edits和Fsimage进行合并(所谓合并,就是将Edits和Fsimage加载到内存中,照着Edits中的操作一步步执行,最终形成新的Fsimage)。SecondaryNameNode的作用就是帮助NameNode进行Edits和Fsimage的合并工作。secondaryNamenode负责定期把editslog合并到fsimage,“定期”是Namenode向secondaryNamenode发送RPC请求的,是按时间或者日志记录条数为“间隔”的,这样即不会浪费合并操作又不会造成fsimage和内存元数据有很大的差距。因为元数据的改变频率是不固定的。

那么SecondaryNameNode是怎么工作的呢?每隔一段时间,SecondaryNameNode会将Namenode上积累的所有edits和一个最新的fsimage下载到本地,并加载到内存进行合并(这个过程称为checkpoint)。然后将新合并的fsimage上传到Namenode。当然,在SecondaryNameNode将积累的editslog读取时,Namenode会另外创建一个新的editslog来进行新一轮的记录累积。

Namenode和secondary Namenode的工作目录存储结构完全相同,所以,当Namenode故障退出需要重新恢复时,可以从secondary Namenode的工作目录中将fsimage拷贝到Namenode的工作目录,以恢复Namenode的元数据。

关于 HDFS的配置

所有关于Namenode、secondary Namenode、Datanode的配置都可以在hdfs-site.xml进行配置,包括块大小、块副本数、checkpoint配置等等。

好文链接

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: