NameNode和DataNode工作机制

NameNode工作机制

NameNode:管理文件系统的命名空间。它维护着文件系统树及整棵树内所有的文件和目录。这些信息以两个文件形式永久保存在本地磁盘上:命名空间镜像文件和编辑日志文件。NameNode也记录着每个文件中各个块所在的数据节点信息,但它并不永久保存块的位置信息,因为这些信息在系统启动时由数据节点重建。

在这里插入图片描述
第一步:
NameNode启动前的目录结构,其中fsmiage是镜像文件,seen_txid只有一个数字,代表最新edits文件的下标,VERSION包含了一些NameNode的信息:NameNode启动前,其中fsmiage是镜像文件,seen_txid只有一个数字,代表最新edits文件的下标,VERSION包含了一些NameNode的信息:
在这里插入图片描述

SecondaryNameNode没有任何文件:
在这里插入图片描述

启动集群后,NameNode生成一个新的edits_inprogress,此处即edits_inprogress_004,此时镜像文件还是原来的:
在这里插入图片描述

集群刚启动,NameNode有一段安全模式,该模式会等待datanode上报块消息,也会把执行一次checkpoint,把镜像文件和edits拷贝到SecondaryNameNode,同时生成一份新的edits文件,SNN把一份新的镜像文件拷贝回NN。
安全模式后,NameNode目录:
在这里插入图片描述
SecondaryNameNode目录:
在这里插入图片描述
上面可以看出NameNode和SecondaryNameNode 相比,只多了一个edits_inprogress_0006,这就是新增的edits文件。
上面过程可以笔者看成是:NN启动,复制一份镜像文件和edits文件到SNN,同时生成一份新的edits文件。

第二步: client执行增删改操作时,会使元数据发生变化,当edits_inprogress满了后,会新增一个edits_inprogress文件,原来的edits文件后缀就会变成00x-00y的样式。
第三步:edits文件满了,或者一定时间后,会触发checkpoint操作,NN把旧的edits文件复制一份到SNN,同时生成一份新的edits文件。
第四步: SNN把NN发送过来的edits文件和本机的fsimage加载到内存中并进行合并,生成一个新的文件fsimage.checkpoint。
第五步:SNN把fsimage.checkpoint拷贝一份到NN中,然后再重命名为fsimage,覆盖旧的fsimage文件。此时NN的fsimage和SNN的fsimage一致,如上面第一步的变化。

关键点:

  • 正常情况下,fsimage只有在NameNode启动时才会跟edits文件进行合并,如果NameNode一直不重启,edits文件会越来越大,当要执行重启时,因为fsimage比较旧,就会需要更多的时间去合并。SNN保证了NN中的fsimage尽可能新。
  • SNN的主要作用是镜像文件备份和日志定期合并,这就是checkpoint的过程,触发checkpoint的条件:1,定时询问;2,edits数据文件满了。

hdfs-site.xml配置(2.8.4版本,低版本的配置是在core.site.xml,根据自己的版本来百度):

<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/home/even/hd/dfs/name</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/home/even/hd/dfs/data</value>
        </property>
        <property>
                <name>dfs.namenode.secondary.http-address</name>
                <value>hd-even-02:50090</value>
                ##如果secondarynamenode为多个话可以设置为0.0.0.0:50090
        </property>
</configuration>
<property>
  <name>dfs.namenode.checkpoint.period</name>
  <value>3600</value>
  <description>The number of seconds between two periodic checkpoints.
  </description>
</property>

<property>
  <name>dfs.namenode.checkpoint.txns</name>  //以日志大小间隔  做备份间隔
  <value>67108864</value>
</property>

<property>
  <name>dfs.namenode.checkpoint.dir</name>
  <value>/home/even/hd/dfs/namesecondary</value>
</property>

DataNode工作机制

DataNode提供了真实文件数据存储的服务,文件块是最基本的存储单位。

在这里插入图片描述

  1. DataNode启动时,首先向NameNode注册
  2. NameNode响应注册
  3. DataNode每隔一段时间上报所有的块信息,NameNode也会监听DataNode的状态(心跳)
  4. 如果超过10分钟DataNode没有上报信息,NameNode认为此节点不可用。

猜你喜欢

转载自blog.csdn.net/weixin_37581297/article/details/84646452