Hadoop--NN和2NN工作机制


1、NameNode元数据的存储

Fsimage 和 Edits 文件

Fsimage 和 Edits 文件都存储在磁盘中

  • Fsimage文件:HDFS文件系统元数据的一个永久性的检查点,其中包含HDFS文件系统的所有目录和文件inode的序列化信息。
  • Edits文件:存放HDFS文件系统的所有更新操作的路径,文件系统客户端执行的所有操作首先会被记录到Edits文件中。

说白了就是,Fsimage存放一定时间内的原始的原数据;Edits存放现在系统所有的更新操作信息。

Fsimage 和 Edits 文件的合并

启动NameNode时,都会将这两个文件进行合达到更新元数据的效果,且将合并后得到的元数据加载到内存中(具体如何实现,将在后面介绍)

NameNode启动后,每次系统进行更新操作时,追加记录到Edits中并修改内存中的元数据。

长时间添加数据到Edits中,会导致该文件数据过大,效率降低,而且一旦断电,恢复元数据需要的时间过长。因此,需要定期进行FsImage和Edits的合并,如果这个操作由NameNode节点完成,又会效率过低。因此,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits的合并。(具体如何实现,将在后面介绍)

Checkpoint原理:
  Secondary NameNode辅助NameNode节点,文件系统的写操作不是直接被修改到fsimage中,而是edits中,辅助NameNode节点负责将两者在自己的内存中整合然后进行相应的替换操作,这样会频繁的对edits进行修改而不是fsimage,而edits文件的大小是可以接受的,而且大小也不会不断增加。

总结
这种存储元数据的方式

  1. 效率高,不需要频繁的更新元数据;
  2. 安全性高,遇到突发事件时,如断电可以利用Fsimage 和 Edits 合并恢复数据。

2、NN和2NN工作机制

详细图解
在这里插入图片描述
详细过程

  1. 第一阶段:NameNode启动
    (1)第一次启动NameNode格式化后,创建Fsimage和Edits文件。如果不是第一次启动,直接加载编辑日志和镜像文件到内存;
    (2)客户端对元数据进行增删改的请求;
    (3)NameNode记录操作日志,更新滚动日志;
    (4)NameNode在内存中对数据进行增删改。
  2. 第二阶段:Secondary NameNode工作
    (1)Secondary NameNode询问NameNode是否需要CheckPoint。直接带回NameNode是否检查结果;
    (2)Secondary NameNode请求执行CheckPoint;
    (3)NameNode滚动正在写的Edits日志。得到edits_ 001(包含以往的更新操作信息,用于合并)、edits_ inprogress_ 002(一个空的文件,之后的更新操作放入这个文件);
    (4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode;
    (5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并;
    (6)生成新的镜像文件fsimage.chkpoint;
    (7)拷贝fsimage.chkpoint到NameNode;
    (8)NameNode将fsimage.chkpoint重新命名成fsimage。

CheckPoint触发条件

  • 定时时间到了

  • Edits中数据已满

    
    # 设置 定时时间 和 操作次数
    
    # 时间
    <property>
      	<name>dfs.namenode.checkpoint.period</name>
      	<value>3600</value>
    </property>
    
    # 次数
    <property>
    	<name>dfs.namenode.checkpoint.txns</name>
        <value>1000000</value>
    	<description>操作动作次数</description>
    </property>
    
    # 检查操作次数的时间间隔
    <property>
    	<name>dfs.namenode.checkpoint.check.period</name>
        <value>60</value>
    	<description> 1分钟检查一次操作次数</description>
    </property >
    
    

3、NameNode宕机恢复

采用文件拷贝方法对NameNode进行恢复,将SecondaryNameNode中数据拷贝到NameNode存储数据的目录。

下面是先将文件压缩再拷贝,也可以直接进行拷贝

  1. 将NameNode存储数据目录name下的内容删除;
  2. 进入2NN数据目录:/…/temp/dfs/namesecondary/;
  3. 将目录下所有文件打包成namesecondary.tar.gz并拷贝到 NN存储数据目录name下;
  4. 进入NN存储数据目录name下,将压缩包解压到./name目录;
  5. 重启NN。

在2NN下的dfs/namesecondary目录下压缩

tar -zcvf namesecondary.tar.gz ./*

在NN下拷贝
NameNode和SeconderyName

  1. 在同一台主机上时

    cp namesecondary.tar.gz path_name_NN
    
  2. 在两台主机上时

    scp -r user_2NN@host_2NN:path_2NN_namesecondary.tar.gz path_NN_name
    

在NN下的./name目录中解压

tar -zxvf namesecondary.tar.gz
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值