NameNode和SecondaryNameNode工作机制

一、NN和2NN工作机制

NN和2NN工作机制,如图所示
在这里插入图片描述
(1)第一阶段:NameNode启动
a)第一次启动NameNode格式化后,创建fsimage和edits文件。如果不是第一次启动,直接加载编辑日志(位于磁盘上,存储的是生成元数据的步骤,执行后会生成元数据)和镜像文件(位于磁盘上,存储的是文件的元数据)到内存。
b)客户端向namenode发出对元数据进行增删改的请求。Namenode在接收这些请求的时候,并不是直接写到内存里面,因为写到内存的话,断电会丢失,因此将这些请求分为一个个小步骤写入到位于磁盘上的编辑日志,这样即使断电,也能从磁盘中恢复出这些数据。
c)NameNode将存储完成的编辑日志执行一遍形成元数据写入到内存,如果edits.inprogress中的编辑日志满了,则会按照编号将其重命名,并创建新的edits.inprogress文件接收新请求,即滚动编辑日志。
d)NameNode在内存中对数据进行增删改查。
(2)第二阶段:Secondary NameNode工作
a)Secondary NameNode询问NameNode是否需要checkpoint。直接带回NameNode是否检查结果。
b)Secondary NameNode请求执行checkpoint。
c)NameNode滚动正在写的edits日志。
d)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。
e)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。
f)生成新的镜像文件fsimage.chkpoint。
g)拷贝fsimage.chkpoint到NameNode。
h)NameNode将fsimage.chkpoint重新命名成fsimage。

NN和2NN工作机制详解: fsimage:namenode内存中元数据序列化后形成的文件。
edits:记录客户端更新元数据信息的每一步操作(可通过Edits运算出元数据)。

namenode启动时,先滚动edits并生成一个空的edits.inprogress,然后加载edits(归档后的)和fsimage(最新的)到内存中,此时namenode内存就持有最新的元数据信息。client开始对namenode发送元数据的增删改查的请求,这些请求的操作首先会被记录在edits.inprogress中(查询元数据的操作不会被记录在edits中,因为查询操作不会更改元数据信息),如果此时namenode挂掉,重启后会从edits中读取元数据的信息。然后,namenode会在内存中执行元数据的增删改查的操作。

由于edits中记录的操作会越来越多,edits文件会越来越大,导致namenode在启动加载edits时会很慢,所以需要对edits和fsimage进行合并(所谓合并,就是将edits和fsimage加载到内存中,照着edits中的操作一步步执行,最终形成新的fsimage)。Secondarynamenode:帮助namenode进行edits和fsimage的合并工作。

secondarynamenode首先会询问namenode是否需要checkpoint(触发checkpoint需要满足两个条件中的任意一个,定时时间到和edits中数据写满了)。直接带回namenode是否检查结果。secondarynamenode执行checkpoint操作,首先会让namenode滚动edits并生成一个空的edits.inprogress,滚动edits的目的是给edits打个标记,以后所有新的操作都写入edits.inprogress,其他未合并的edits和fsimage会拷贝到secondarynamenode的本地,然后将拷贝的edits和fsimage加载到内存中进行合并,生成fsimage.chkpoint,然后将fsimage.chkpoint拷贝给namenode,重命名为fsimage后替换掉原来的fsimage。namenode在启动时就只需要加载之前未合并的edits和fsimage即可,因为合并过的edits中的元数据信息已经被记录在fsimage中。

二、集群安全模式

1)概述
NameNode启动时,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。同时,NameNode开始监听DataNode请求,因为hdfs的文件是以块列表的形式存储在DataNode中的,datanode要向namenode汇报它们所维护的块信息,这样namenode才能知道这些块信息,才能够对外正常提供服务。此刻,NameNode运行在安全模式,即NameNode的文件系统对于客户端来说是只读的。在安全模式下,各个DataNode会向NameNode发送最新的块列表信息,NameNode了解到足够多的块位置信息之后,才可对外正常提供服务。
也就是说namenode在刚启动的时候,没有收集到足够多的块信息,还不能对外提供服务,需要在安全模式下做好准备,那么什么时候才认为是收集了足够多的块信息了呢?
如果满足“最小副本条件”,NameNode会在30秒钟之后就退出安全模式。所谓的最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式。
2)基本语法
集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。
(1)bin/hdfs dfsadmin -safemode get (功能描述:查看安全模式状态)
(2)bin/hdfs dfsadmin -safemode enter (功能描述:进入安全模式状态)
(3)bin/hdfs dfsadmin -safemode leave (功能描述:离开安全模式状态)
(4)bin/hdfs dfsadmin -safemode wait (功能描述:等待安全模式状态,监控安全模式)
3)案例
模拟等待安全模式
(1)先进入安全模式

[root@hadoop003 hadoop-2.7.2]$ bin/hdfs dfsadmin -safemode enter

(2)执行下面的脚本
编辑一个脚本

#!/bin/bash
bin/hdfs dfsadmin -safemode wait(安全模式关闭)
bin/hdfs dfs -put ~/hello.txt /root/hello.txt

(3)再打开一个窗口,执行

[root@hadoop003 hadoop-2.7.2]$ bin/hdfs dfsadmin -safemode leave
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值