secondary namenode元数据checkpoint机制

secondary namenode元数据checkpoint机制_第1张图片

将机制前先明确下面的几点

namemode保存的元数据是在内存中的

namenode一般有128G

一个元数据大小为150B,记录一个块(0-128M)。所以hadoop不适用存储一个小文件。

secondary  namenode也是在内存中操作

 

secondarynamenode元数据checkpoint机制

当客户端不断发出命令的时候,namenode都做了什么?

打个比方说:现在客户端发出一串下面的命令

上传文件:/aaa.txt

修改文件   /aaa.txt    to  /bbb.txt

修改文件   /bbb.txt    to  /ccc.txt

修改文件   /ccc.txt    to  /ddd.txt

上传文件:/1.d

1:namenode记录/aaa.txt的元数据

2: namenode记录/1.d的元数据

3:namenode将上面的命令记录在操作日志中(edits)。

为什么是edits?下面的图可以解释

secondary namenode元数据checkpoint机制_第2张图片

 

在上面的操作中secondary  namenode做了什么?

1 secondary  namenode和namenode之间存在一种类似心跳检查机制,secondary  namenode会时常问namenode要不要来一次edits文件合并(checkpoing)。

2 namenode收到secondary  namenode的提问,刚好现在namenode需要来一次edits文件合并(checkpoing),就告诉对方说,我需要,为了这个事情,我们同时把管道建立起来吧。

3 namenode生成一个新的edits(滚动实现),将所有旧的edits文件和镜像文件(fsImage)一起打包通过管道发给secondary  namenode。

4 secondary  namenode收到来自于namenode的所有edits文件和镜像文件(fsImage)。这个时候,他在内存中做了合并操作。

怎么合并?比如说刚刚什么的一系列命令

上传文件:/aaa.txt

修改文件   /aaa.txt    to  /bbb.txt

修改文件   /bbb.txt    to  /ccc.txt

修改文件   /ccc.txt    to  /ddd.txt

上传文件:/1.d

合并后

上传文件:/aaa.txt

修改文件   /aaa.txt    to  /ddd.txt

上传文件:/1.d

这样操作后,大幅度减少edits文件的多余命令,放在down机重启的时候,要解析很多edits文件和fsImage文件。因为做了合并操作

5合并后,生产一个fsImage文件,通过管道覆盖namenode的fsImage文件。

6结束,继续间隔一段时间问namenode是否需要做合并操作(说白了和redis AOF的重写AOF文件一样)

你可能感兴趣的:(大数据,hadoop)