首先,要有这个观念,元数据信息(fsimage + editslog)。
fsimage是在磁盘
metadata是在内存
********************fsimage把内存的,序列化到磁盘了。********************
元数据信息(fsimage + editslog),内存保存一份,磁盘保存一份,,,,,其他有个什么地方也要保存一份。
==============》 就如,学校图书馆里。书库,为了使得借书运转,要买多本书存库。《======================
fsimage:元数据镜像文件,存储某一时段NameNode内存元数据信息。
在hadoop1.*里,就是fsimage。
在hadoop2.*里,还加了后缀。
听说过镜像。 关闭时,将机器内存的信息写到磁盘,启动时,将磁盘的东西读取到内存。
edits:操作日志文件
比如说,上传一个文件或删除一个文件,这些操作。
fstime:保存最近一次checkpoint的时间
比如说,在6月1号买的新电脑,在6月5日,做的第一次还原点,在6月18号,由于中病毒。在6月21号是做的第二次还原点。Checkpoint是保存最近的那次做还原点的数据。6月18-21日。
namenode始终在内存中保存metadata,用于处理“读请求”。到有“读请求”时,namenode会首先写editlog到磁盘,即向edits(操作日志文件)中写入日志,成功返回后,才会修改内存,并且向客户端返回。
形象化例子:我client提货员,向仓库管理员namenode,请求提货,在他同意同时,会将这情况写到editlog,先是将editlog写到磁盘,成功后,再写到内存。
fsimage载入内存 合并edits
|
|
|
新的 fsimage
|
|
|
namenode,替换旧的
条件一:
fs.checkpoint.period
默认是3600秒,每隔一个小时,Secondarynamenode就要下载fsimage和edits,进行数据的同步。
条件二:
fs.checkpoint.size
edits一直在变大。一旦达到,就要进行合并。
只要达到这两个条件的其中一个,都会进行合并。