【Hadoop】HDFS中Namenode和SecondaryNameNode的工作流程

往期文章

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



元数据

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

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

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

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


Namenode和SecondaryNameNode的工作流程

Namenode启动时,会加载fsimageeditslog到内存中,此时内存就持有最新的元数据信息。然后等待 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配置等等。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不怕娜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值