论secondary namenode的Checkpoint过程与双胞胎的关系

关于Checkpoint正经解释

Checkpoint过程

每达到触发条件,会由secondary namenode 将 namenode 上积累的所有 edits 和一个最新的 fsimage 下载到本地,并加载到内存进行 merge(这个过程称为 checkpoint),如下图所示:
论secondary namenode的Checkpoint过程与双胞胎的关系

Checkpoint 详细步骤

  • NameNode 管理着元数据信息,其中有两类持久化元数据文件:edits 操作日志文件和fsimage元数据镜像文件。新的操作日志不会立即与 fsimage 进行合并,也不会刷到NameNode 的内存中,而是会先写到 edits 中(因为合并需要消耗大量的资源),操作成功之后更新至内存。
  • 有dfs.namenode.checkpoint.period 和dfs. namenode. checkpoint.txns两个配置,只要达到这两个条件任何一个,secondarynamenode 就会执行 checkpoint 的操作。
  • 当触发checkpoint操作时,NameNode会生成一个新的edits即上图中的edits.new文件,同时SecondaryNameNode 会将 edits 文件和 fsimage 复制到本地(HTTP GET 方式)。
  • secondarynamenode 将下载下来的 fsimage 载入到内存,然后一条一条地执行 edits 文件中的各项更新操作,使得内存中的 fsimage 保存最新,这个过程就是 edits 和 fsimage 文件合并,生成一个新的 fsimage 文件即上图中的Fsimage.ckpt 文件。
  • secondarynamenode 将新生成的 Fsimage.ckpt 文件复制到 NameNode 节点。
  • 在 NameNode 节点的 edits.new 文件和 Fsimage.ckpt 文件会替换掉原来的 edits 文件和 fsimage 文件,至此刚好是一个轮回,即在 NameNode 中又是 edits 和 fsimage 文件。
  • 等待下一次 checkpoint 触发 SecondaryNameNode 进行工作,一直这样循环操作。

关于Checkpoint不正经解释

前提

现在我们想象有一对双胞胎,他们只能公用一个身份在外面生活上班(fsimage),白天是哥哥在外面,晚上是弟弟在外面。
这时有一个问题,为了不穿帮,在外面的那个人必须要把他在外面的事情发生的事都记录一下(edits),到身份交换的时候,要告诉另一个人都发生了什么。

双胞胎的checkpoint过程

  • 当白天哥哥在外工作(hdfs正常工作),他需要把每件事情都记录一下(编辑日志),无论是剪头发还是受伤,还是遇到什么人,只要是能让自己改变的事情(记录更新操作)。
  • 当到点进行身份交换时(触发checkpoint),哥哥回到家,将生活发生变化的事情按先后顺序告诉弟弟,弟弟根据记录的事情改变一下自己(fsimage和edits在本地进行合并,生成新的fsimage)。
  • 之后弟弟再代替哥哥出去工作,并且记录一下工作中发生的事情。之后周而复始,周而复始,周而复始。

小提示

这其实有点像《白夜追凶》中的潘粤明,不过主角弟弟没有咱们想象的弟弟听话!

这是一个不太严谨的对比,博主是一个背书很差的人,想用这样的方式学习技术,顺便给其他朋友提供一个有趣的思路。很欢迎大家有不同的意见和有意思的想法和我分享。