• hdfs NameNode和SecondaryNameNode工作机制、FsImage和Edits解析、集群安全模式



    1. NameNode和SecondaryNameNode工作机制

    1.1 NameNode元数据存储

      元数据需要存放在内存中进行随机访问,并处理客户请求。但为了防止断电,元数据丢失,因此产生在磁盘中备份元数据的FsImage(NameNode内存中元数据序列化后形成的文件)。
      内存中的元数据更新,为保证磁盘和内存元数据的一致性同步的效率,引入Edits(记录客户端更新元数据信息的每一步操作)文件进行追加操作,即当元数据有更新或者添加时,修改内存中的元数据并追加到Edits中。一旦NameNode节点故障,可以通过FsImage和Edits的合并,合成元数据。
      如果长时间追加Edits,文件数据过大,会造成效率降低且一旦断电元数据恢复耗时过长。因此,需要定期进行FsImage和Edits合并,引入一个新的节点SecondaryNamenode,专门用于FsImage和Edits合并。

    1.2 工作流程

    在这里插入图片描述

    1.2.1 NameNode启动

    (1)第一次启动NameNode格式化后,创建FsImage和Edits文件。如果不是第一次启动,生成一个空的edits.inprogress,直接加载FsImage和Edits到内存
    (2)客户端对元数据进行增删改的请求
    (3)NameNode记录操作日志,更新滚动日志
    (4)NameNode在内存中对元数据进行增删改

    1.2.2 Secondary NameNode工作流程

    (1)Secondary NameNode询问NameNode是否需要进行CheckPoint(每分钟询问一次,若操作数超过1百万则进行合并;每小时合并一次)
    (2)Secondary NameNode请求执行CheckPoint
    (3)NameNode滚动正在写的Edits日志,生成一个空的edits.inprogress,新的操作写入edits.inprogress
    (4)将滚动前的FsImage和Edits拷贝到Secondary NameNode
    (5)Secondary NameNode加载FsImage和Edits到内存,并合并
    (6)生成新的镜像文件fsimage.chkpoint
    (7)拷贝fsimage.chkpoint到NameNode
    (8)NameNode将fsimage.chkpoint重新命名成fsimage

    1.3 SecondaryNameNode触发CheckPoint配置

    hdfs-site.xml配置文件中:

    <!--checkpoint时间-->
    <property>
      <name>dfs.namenode.checkpoint.period</name>
      <value>3600</value>
    </property>
    
    <!--checkpoint次数-->
    <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 >
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18

    2. FsImage和Edits解析

    2.1 概念

      NameNode(配置的多目录)下查找FsImage和Edits

    <property>
        <name>dfs.namenode.name.dir</name>
    	<value>file://路径1,file://路径2</value>
    </property>
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述
      FsImage:hdfs文件系统元数据的一个永久性检查点;Edits:在文件中追加hdfs的更新操作;

    2.2 oiv查看Fsimage文件

    语法:

    hdfs oiv -p 文件类型 -i 镜像文件 -o 转换后文件输出路径
    
    • 1

    如:

    hdfs oiv -p XML -i fsimage_0000000000001320435 -o ./fsimage.xml
    
    • 1

    在这里插入图片描述

    注:
      FsImage中没有记录块所对应DataNode,因此在集群启动后,NameNode要求DataNode上报数据块信息,并间隔一段时间后再次上报。

    2.3 oev查看Edits文件

    语法:

    hdfs oev -p 文件类型 -i编辑日志 -o 转换后文件输出路径
    
    • 1

    如:

    hdfs oev -p XML -i edits_0000000000001320436-0000000000001327977 -o ./edits.xml
    
    • 1

    在这里插入图片描述


    3. NameNode故障处理

    (1)将SecondaryNameNode中数据拷贝到NameNode存储数据的目录;
    (2)使用-importCheckpoint选项启动NameNode守护进程,从而将SecondaryNameNode中数据拷贝到NameNode目录中


    4. 集群安全模式

    4.1 概念

      安全模式是HDFS的一种特殊状态。在这种状态下,HDFS只接收读数据请求而不接收写入、删除、修改的变更请求

    4.2 安全模式退出判断

      NameNode启动时,在加载元数据到内存过程中,NameNode处于安全模式,对客户端只读;
      DataNode启动时,由于数据块的位置并不是由NameNode维护的,而是以块列表的形式存储在DataNode中。NameNode在内存中仅保留所有块位置的映射信息。在安全模式下,各个DataNode会向NameNode发送最新的块列表信息
      如果满足最小副本条件,NameNode会在30秒钟之后就退出安全模式。最小副本条件指在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以NameNode不会进入安全模式

    4.3 语法

    hdfs dfsadmin -safemode get		(功能描述:查看安全模式状态)
    hdfs dfsadmin -safemode enter  	(功能描述:进入安全模式状态)
    hdfs dfsadmin -safemode leave	(功能描述:离开安全模式状态)
    hdfs dfsadmin -safemode wait	(功能描述:等待安全模式状态)
    
    • 1
    • 2
    • 3
    • 4

    在这里插入图片描述


  • 相关阅读:
    案例:恒流负载导致的启动故障
    工程效能CI/CD之流水线引擎的建设实践总结
    XXL-Job海量数据处理-分片任务实战
    金九银十投递:美团、滴滴、360,面经回馈与经验分享(附学习路线+思维导图+刷题指南)
    1105 平台(空间)
    Node.js中基于node-schedule实现定时任务之详解
    YOLOv7优化:独家创新(Partial_C_Detect)检测头结构创新,实现涨点 | 检测头新颖创新系列
    Framework定制系列(十)-----SystemUI定制状态栏statusbar和导航栏navigationbar教程
    凉鞋的 Unity 笔记 202. 变量概述与简介
    带你走进不一样的策略模式
  • 原文地址:https://blog.csdn.net/javahelpyou/article/details/125449809