NameNode工作机制

NameNode工作机制_第1张图片

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,之后的操作就记录在新的edit当中

(4)将滚动前的编辑日志和镜像文件拷贝到Secondary NameNode。

(5)Secondary NameNode加载编辑日志和镜像文件到内存,并合并。

(6)生成新的镜像文件fsimage.chkpoint。

(7)拷贝fsimage.chkpoint到NameNode。

(8)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中。

思考:当NN挂掉时,2NN能否顶替NN的工作:

  不能,因为NN交给2NN合并fsimage和edits时,NN自己又生成了新的edits,2NN在合并的同时,NN这个时间段的操作是记录在这个新的edits当中,2NN中不会有这个新的edits,所以不能顶替NN工作。NN中那个旧的edits文件不会删除,而是在data中保存着。fsimage则会在data中保留两个文件,一个是最新的fsimage,一个是第二新的,其他的都会删除

NameNode工作机制_第2张图片

元数据的存储

  namenode主要负责元数据的存储,元数据存储在fsiamge文件+edits文件中!

    fsimage(元数据的快照文件)

    edits(记录所有写操作的文件)

  NN负责集群中所有客户端的请求和所有DN的请求!在一个集群中,通常NN需要一个高配置,保证NN

  可以及时处理客户端或DN的请求,一旦NN无法及时处理请求,HDFS就已经瘫痪!

fsimage文件的产生:

  ①第一次格式化NN时,此时会创建NN工作的目录,其次在目录中生成一个fsimage_000000000000文件

  ②当NN在启动时,NN会将所有的edits文件和fsiamge文件加载到内存合并得到最新的元数据,将元数据持久化到磁盘生成新的fsimage文件

  ③如果启用了2nn,2nn也会辅助NN合并元数据,会将合并后的元数据发送到NN

edits:

  NN在启动之后,每次接收的写操作请求,都会将写命令记录到edits文件中,edits文件每间隔一定的时间和大小滚动!

txid :

  每次写操作命令,分解为若干步,每一步都会有一个id,这个id称为txid!

NN的元数据分两部分:

  ①inodes : 记录在fsimage文件中或edits文件中
  ②blocklist: 块的位置信息(每次DN在启动后,自动上报的)

安全模式

  1.NN在启动时,当NN将所有的元数据加载完成后,等待DN来上报块的信息

  当NN中所保存的所有块的最小副本数(默认为1) / 块的总数 > 99.99%时,NN会自动离开安全模式!

  在安全模式,客户端只能进行有限读操作!不能写!

总结

  1. NN主要负责元数据的存储

  2. 两种存储的文件格式

    edits: 在NN启动后,保存新写入的命令
    fsimage: 在合并了edits和fsimage文件后,将新的元数据持久化到新的fsimage文件中
    合并的时机: 需要满足checkpoint的条件
      ①默认1h
      ②两次checkpoint期间已经额外产生了100w txid的数据

  3. 存储的元数据分为两种

  ①inodes : 记录文件的属性和文件由哪些块组成,记录到edits和fsimage文件中

  ②块的位置映射信息: 由NN启动后,接收DN的上报,动态生成!

  4. NN的启动过程

  ①先加载fsimage_000000xx文件

  ②将fsimage文件xx之后的edits文件加载

  ③合并生成最新的元数据,记录checkpoint,如果满足要求,执行saveNamespace操作,不满足等满足后执行

  saveNamespace操作必须在安全模式执行

  ④自动进入安全模式,等待DN上报块

    DN上报的块的最小副本数总和 / 块的总数 > 0.999,自动在30s离开安全模式!

    安全模式只能有限读,不能写!

你可能感兴趣的:(hadoop)