暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Hadoop学习笔记之NameNode工作机制解析

运维路书 2023-09-19
128


第一篇学习了Hadoop大数据平台的基础概念

第二篇学习了Hadoop的HDFS相关理论知识和工作流程

Hadoop大数据平台学习笔记之概念篇

Hadoop大数据平台学习笔记之HDFS


本期继续深挖HDFS,学习一下NameNode的工作机制







概述


NameNode 

HDFS的核心服务,管理和维护着整个HDFS,主要有以下作用:

  • 负责接收客户端的操作请求;

  • 负责管理文件系统命名空间(NameSpace)、集群配置信息及存储块的复制等;



  • 负责文件目录树的维护以及文件对于BLOCK列表的维护;

  • 负责管理Block与DataNode之间的关系;

 

SecondaryNameNode

负责合并NameNode的Edits到FsImage文件中,来保证NameNode中数据的可靠性。





工作流程





第一阶段 NameNode启动

  1. 第一次NameNode格式化启动之后,首次会创建FsImage文件和Edits文件。非第一次启动,直接加载Fsimage文件和Edits文件到内存中;

  2. 客户端对元数据执行增删改查操作,并记录到Edits文件中;

  3. NameNode记录操作日志;

  4. NameNode在内存中对数据进行增删改查;



第二阶段 SecondaryNameNode启动

  1. 询问NameNode是否需要CheckPoint,NameNode返回信息;

  2. NameNode切割现有日志文件,新记录滚动写入新Edits文件;

  3. 拷贝FsImage文件和旧的Edits文件到SNN节点,可能有多个文件

  4. SNN加载FsImage文件和Edits文件到内存中合并;

  5. 生产新的FsImage文件;

  6. 将新生成的FsImage文件拷贝到NameNode;

  7. NameNode将新生成的FsImage文件重命名替换旧的FsImage文件;






CheckPoint



CheckPoint节点通常运行在与NameNode不同的机器上。

 

SecondaryNameNode 定期从Active NameNode上将Edits文件和FsImage文件下载到本地,并加载到内存进行合并。这个合并过程称为一个检查点(CheckPoint)。

 

在 NameNode 运行期间,HDFS 的所有变更操作都是写到 Edits 文件中。一段时间后,Edits 文件会变得非常大。CheckPoint 的出现就是解决 Edits 文件不断变大的问题,并将 Edits 文件大小保持在限制范围内。

 

NameNode 和 SecondaryNameNode 的数据目录存储结构完全相同。

当单节点集群下 NameNode 故障需要重新恢复时,可以从 SecondaryNameNode 的数据目录中将 FsImage 和 Edits 所有文件拷贝到 NameNode 的数据目录,以恢复 NameNode 的元数据。但只能恢复大部分数据,因为有些数据可能还没做 CheckPoint。

 

通过修改 【hdfs-default.xml】 文件的相关配置,设置CheckPoint检查时间参数


    <property>
     <name>dfs.namenode.checkpoint.period</name>
     <value>3600</value>
     <description>每隔3600秒 checkpoint 一次</description>
    </property>




    <property>
     <name>dfs.namenode.checkpoint.txns</name>
     <value>1000000</value>
     <description>操作次数达到 100万 次 checkpoint 一次</description>
    </property>




    <property>
     <name>dfs.namenode.checkpoint.check.period</name>
     <value>60</value>
     <description>每隔60秒检查一次操作次数是否达到</description>
    </property>


    dfs.namenode.checkpoint.period 和 dfs.namenode.checkpoint.txns 这两个参数只要任意满足于其中一个,都会触发 CheckPoint。

     

    由于 CheckPoint 的过程需要消耗大量的 IO 和 CPU 资源,并且会阻塞 HDFS 的读写操作。所以,该过程不会在 NameNode 节点上触发。






    文件信息


    概念


    NameNode中包含FsImage 和 Edits两个文件

    NameNode被格式化之后,将在{data_dir}/tmp/dfs/name/current目录中产生如下文件

      edits_0000000000000000000
      fsimage_0000000000000000000.md5
      seen_txid
      • FsImage

      命名空间镜像文件,记录数据块到文件的映射、目录或文件的结构、属性等信息。

      • Edits

      操作日志文件,记录对所有文件的创建、删除、重命名等操作日志。

      • seen_txid

      seen_txid文件保存的是一个数字,就是最后一个edits_的数字。记录了最后一次 CheckPoint 或者 edit 回滚(将 edits_inprogress_xxx 文件回滚成一个新的 Edits 文件)之后的 transaction ID。主要用来检查 NameNode 启动过程中 Edits 文件是否有丢失的情况。

       

      每次Namenode启动的时候都会将fsimage文件读入内存,并从00001开始到seen_txid中记录的数字依次执行每个edits里面的更新操作,保证内存中的元数据信息是最新的、同步的,可以看成Namenode启动的时候就将fsimage和edits文件进行了合并。

       

      文件查看


      查看FsImage文件

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

      -i  要转换的文件

      -o  转换后的文件路径

      -p  转换格式(XML|FileDistribution|ReverseXML|Web|Delimited)

       

      查看Edits文件

      hdfs oev -p 文件类型 -i操作日志文件 -o 转换后文件输出路径

      -i  要转换的文件

      -o  转换后的文件路径

      -p  转换格式:binary(hadoop 二进制格式), xml(默认 XML 格式), stats(打印关于编辑文件的统计信息)





      故障恢复


      NameNode故障后,有两种方法恢复数据。




      拷贝SecondaryNameNode数据

      将SecondaryNameNode中数据拷贝到NameNode存储数据的目录



      1.

      kill -9 namenode进程


      2.

      删除namenode存储数据(~/data/tmp/dfs/name)


        $ rm -rf  ~/data/tmp/dfs/name/*



         3.

        拷贝SecondaryNameNode中数据到原namenode存储数据目录

          [dfs]$ scp -r xx@hadoop04:/opt/module/hadoop-3.3.6/data/tmp/dfs/namesecondary/* ./name/



          4.

          重新启动namenode

            sbin/hadoop-daemon.sh start namenode


            CheckPoint机制


            修改hdfs-site.xml


              <property>
               <name>dfs.namenode.checkpoint.period</name>
               <value>120</value>
              </property>


              <property>
               <name>dfs.namenode.name.dir</name>
               <value>/opt/module/hadoop-3.3.6/data/tmp/dfs/name</value>
              </property>

              小结


              1.

              kill -9 namenode进程




              2.

              删除namenode存储数据(~/data/tmp/dfs/name)




              3.

              如果SecondaryNameNode不和Namenode在一个主机节点上,需要将SecondaryNameNode存储数据的目录拷贝到Namenode存储数据的平级目录,并删除in_use.lock文件。


                [xx@hadoop02 dfs]$ scp -r xx@hadoop04:/opt/module/hadoop-3.3.6/data/tmp/dfs/namesecondary ./
                [xx@hadoop02 namesecondary]$ rm -rf in_use.lock
                [xx@hadoop02 dfs]$ pwd
                /opt/module/hadoop-3.3.6/data/tmp/dfs
                [xx@hadoop02 dfs]$ ls
                data  name  namesecondary



                4.

                导入检查点数据(等待一会ctrl+c结束掉)


                  bin/hdfs namenode -importCheckpoint



                  5.

                  启动namenode





                  多个目录配置


                  NameNode的本地目录可以配置成多个,且每个目录存放内容相同,增加了可靠性。



                  添加配置


                    # vim opt/hadoop2.7/etc/hadoop/hdfs-site.xml
                    # 添加内容如下
                    <property>
                       <name>dfs.namenode.name.dir</name>    
                       <value>file:///${hadoop.tmp.dir}/dfs/name01,file:///${hadoop.tmp.dir}/dfs/name02</value>
                    </property>


                    删除原有数据

                    集群下所有服务都需要执行该操作;


                      [hadoop3.3.6]# rm -rf data/ logs/


                      格式化集群并启动


                        [hadoop3.3.6]# bin/hdfs namenode –format
                        [hadoop3.3.6]# sbin/start-dfs.sh





                        集群安全模式



                        概述


                        • Namenode启动时,首先将映像文件(fsimage)载入内存,并执行编辑日志(edits)中的各项操作。一旦在内存中成功建立文件系统元数据的映像,则创建一个新的fsimage文件和一个空的编辑日志。此时,namenode开始监听datanode请求。但是此刻,namenode运行在安全模式,即namenode的文件系统对于客户端来说是只读的。

                        • 系统中的数据块的位置并不是由namenode维护的,而是以块列表的形式存储在datanode中。在系统的正常操作期间,namenode会在内存中保留所有块位置的映射信息。在安全模式下,各个datanode会向namenode发送最新的块列表信息,namenode了解到足够多的块位置信息之后,即可高效运行文件系统。

                        • 如果满足“最小副本条件”,namenode会在30秒钟之后就退出安全模式。所谓的最小副本条件指的是在整个文件系统中99.9%的块满足最小副本级别(默认值:dfs.replication.min=1)。在启动一个刚刚格式化的HDFS集群时,因为系统中还没有任何块,所以namenode不会进入安全模式。

                         

                        基本语法


                         


                        集群处于安全模式,不能执行重要操作(写操作)。集群启动完成后,自动退出安全模式。

                        • bin/hdfs dfsadmin -safemode get        (功能描述:查看安全模式状态)

                        • bin/hdfs dfsadmin -safemode enter    (功能描述:进入安全模式状态)

                        • bin/hdfs dfsadmin -safemode leave     (功能描述:离开安全模式状态)

                        • bin/hdfs dfsadmin -safemode wait      (功能描述:等待安全模式状态)

                        文章转载自运维路书,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

                        评论