大数据学习之hadoop——08NameNode工作机制、原理

NameNode原理

请读者带着以下问题阅读本篇文章

  • 如何存元数据?
  • 如何保证集群的状态?

1、磁盘与内存

在hdfs文件系统开始服务时,将会读取磁盘上的一些文件、配置等等,在内存(缓存)使用这些数据
例1:对文件进行2000000次相同内容的删除增加,在内存中执行此操作,到最后到磁盘上的结果就是什么都没发生
原因:和磁盘多次交互会导致效率变低,从内存增删改查则是高效的选择

2、文件系统的运行原理

  • edits:编辑日志(操作过程数据)
  • fsimages:镜像文件(某一时刻的完整状态,HDFS只会保存最新的两个镜像文件)

2.1、在hdfs第一次启动时,会在name目录下创建edits和fsimage文件。在之后的启动过程中,HDFS会把磁盘中最新的fsimage文件和edits文件加载到内存中,并且同时创建edits.inprogress文件。
2.2、edits文件分为两种,正在运行的文件系统将操作存储至edits_improgressxxx文件,在集群关闭或者进行滚动日志时该文件将转化为edits_xxx文件,如果是日志滚动将会生成新的edits_improgressxxx文件
2.3、例2:有一家公司的财务需要每两个月清算一下账单,清算结束后将结果布告。在这两个月中公司的所有进出账都会进行记录,并且浮动资金超过30%就要清算一次变成小账本,所以这两个月中可能只有一个小账本也可能有多个小账本。到了两个月就将所有小账本其合并至总账单中。如果工商局在一个半月的时候突然要求查看所有账单,那么进行合并将会是上次结算的总账单,所i有已经总结好的小账本,以及还没来得及整理成小账本的财务明细
在本例中:

  • 财务的总账单—>fsimage文件
  • 小账本—>edits日志文件
  • 没来的及整理成小账本的财务明细—>edits.inprogress文件
  • 每两个月总结一次—>HDFS运行时间为一小时
  • 浮动资金超过30%—>HDFS的操作记录数达到100万条
    大数据学习之hadoop——08NameNode工作机制、原理

3、NameNode工作原理、checkpoint合并机制

那么合并的工作由谁来做,什么时间做?

  • SecondryNameNode将会执行这个操作
    • 每隔一分钟SNN将会询问NN是否需要合并
  • 触发两个条件之一将会合并
    • 记录数达到100万条
    • 集群运行时间达到了一小时
      每次合并fsimage文件与edits文件都相当于合并 存储的最后一个fsimage文件和最后一段edits文件,以及当前集群的edits.inprogress滚动而来的文件
  • 一次完整的checkpoint
    • 1、 NameNode将最新的fsimage001文件和edits001文件读取到内存中,以此来保证文件系统是最新的状态
    • 2、客户端发起对文件系统上的内容进行修改
    • 3、最新的edits001文件进行一次滚动生成下一个edits02文件,并且生成edits.inprogress001文件,用来存储本次集群开启将进行的所有操作
    • 4、用户提出的请求将会在内存中进行修改,并将操作记录记录至edits.inprogress001文件中
    • 5、SNN向NN询问是否需要checkpoint(当文件系统运行了1小时或者操作记录达到100万次)
    • 6、请求执行checkpoint操作
    • 7、滚动正在记录的edits.inprogress001文件为edits003文件,并生成新的edits.inprogress002文件,记录在合并过程中对文件系统的操作
    • 8、将edits002、edits003、fsimage001拷贝至SNN加载至内存进行合并
    • 9、生成新的fsimage.chkpoint001文件
    • 10、将新生成的fsimage.chkpoint001文件拷贝至NameNode中
    • 11、将拷贝过来的fsimage.chkpoint001重命名为fsimage002文件,
    • 12、下一次合并的应为由edits.inprogress002转化而来的edits文件、fsimage002文件、以及新生成的edits.inprogress滚动而来的文件,共同合并。
      大数据学习之hadoop——08NameNode工作机制、原理