• HDFS之SecondaryNameNode的工作机制


    问题:元数据管理是在内存中进行的,一旦故障,无法恢复。

    解决方法:采用fsimage镜像文件和edit log编辑日志的方式来持久化数据。

    fsimage是二进制的序列化文件,相当于内存的快照,可以跨平台,恢复速度快。但是不能每时每刻记录fsimage(如果记录频繁,数量多或者文件大,内存读取速度就会变慢),于是就有edit log辅助记录。

    edit log记录的是对元数据增删改的操作,但是记录过多,就会越来越庞大。namenode读取这两个文件,恢复的速度就会减慢。

    于是,有一种机制,定时将fsimage,edit log合并成新的fsimage即可。这个工作不能由工作繁忙的namenode来做,所有就出现了一个助手,

    secondaryNameNode来协助工作。

    SecondaryNameNode的工作机制

    参考网址:https://zhuanlan.zhihu.com/p/117770907

    1) NameNode

    • 加载至内存

           第一次启动集群,初始化namenode,将生成一个空的fsimage文件和edit log日志文件;如果不是第一次,内存会将fsimage文件和edit log日志加载到内存         中,并将fsimage,edit log做一次合并,edit log变成一个空的日志文件,内存中是最新的元数据信息;

    • 客户端发起元数据的增删改
    • 将增删改操作记录到新的edit log中
    • 在内存中做元数据的增删改操作

    2)SecondaryNameNode

    • 定期询问是否需要checkpoint,并返回信息
    • 对nn执行checkpoint

               当满足时间>1h 或者 edit log日志>64M时,会对namenode进行checkpoint

    • 对原edit log进行标记,生成一个新的edit log

               新的edit log用来记录合并后的新的元数据操作。

    • 拷贝fsimage和edit log(标记)到secondaryNamenode
    • 在内存中将这个两个文件合并
    • 生成一个新的fsimage
    • 将fsimage拷贝至namenode
    • 替换之前的fsimage
    爱人不亲,反其仁;治人不治,反其智;礼人不答,反其敬;行有不得,反求诸己
  • 相关阅读:
    04.日志管理
    刷爆美国朋友圈的超燃短片:年轻人为什么要奋斗?
    【逗比作孽呀】网站缓存优化
    来看看这20个顶尖的开源项目!
    nginx处理问题笔记
    -bash: warning: setlocale: LC_CTYPE: cannot change locale (UTF-8): No such file or directory
    一个创业公司倒下的128小时
    快速打造跨平台开发环境 vagrant + virtualbox + box
    【Git 使用笔记】第四部分:git在公司中的开发流程
    新购买的vps应该做的几件事情
  • 原文地址:https://www.cnblogs.com/lina-2015/p/14143885.html
Copyright © 2020-2023  润新知