本文共 1172 字,大约阅读时间需要 3 分钟。
HDFS这样的分布式文件系统,对文件数据的修改不是直接写回到磁盘的,很多操作是先缓存到内存的Buffer中,当遇到一个检查点Checkpoint时,系统会强制将内存中的数据写回磁盘,当然此时才会记录日志,从而产生持久的修改状态。
1.Namenode上面有些什么数据:
笔记2中提到namenode管理结点主要有下面两类文件 edits:HDFS操作的日志记录,没此对HDFS进行修改操作后,都会往edits中记录一条日志; fsimage:HDFS中命名空间、数据块分布、文件属性等信息都存放在fsimage中; 注:只有在每次启动Namenode时,才会把edits中的操作增加到fsimage中,并且把edits清空。 所以fsimage总是记录启动Namenode时的状态,而edits在每次启动时也是空的,它只记录本次启动后的操作日志。2.checkpoint触发的条件
在配置文件中有两个参数: fs.checkpoint.period:设置两次相邻checkpoint之间的时间间隔,默认是1小时; fs.checkpoint.size:设置一个edits文件大小的阈值,达到这个阈值,就强制执行一此checkpoint(即使此时没有达到period的时限),默认为64MB。3.Checkpoint执行过程
Chekpoint主要干的事情是,将Namenode中的edits和fsimage文件拷贝到Second Namenode上,然后将edits中的操作与fsimage文件merge以后形成一个新的fsimage,这样不仅完成了对现有Namenode数据的备份,而且还产生了持久化操作的fsimage。最后一步,Second Namenode需要把merge后的fsimage文件upload到Namenode上面,完成Namenode中fsimage的更新。 当Namenode发生故障丢失元数据后,可以利用Second Namenode进行导入恢复: (1)在Namenode的节点上面创建dfs.name.dir指定的目录; (2)指定配置文件中的fs.checkpoint.dir(应该是hdfs-site.xml文件); (3)启动Namenode时带上选项 -importCheckpoint。 (4)Namenode首先会将fs.checkpoint.dir中的文件拷贝到dfs.name.dir中,如果此时dfs.name.dir中已经包含了合法的fsimage文件(也就是Namenode没有发生元数据丢失却执行了导入操作),那么Namenode就会执行失败。否则,Namenode会检测导入的fsimage文件是否与文件系统中的数据一致,若一致则成功完成导入恢复。转载地址:http://arqen.baihongyu.com/