HDFS——fsimage

原创
2020/05/19 12:53
阅读数 95

【前言】

《HDFS——editLog文件》一文中提到了namenode(后面简称nn)的元数据信息由editlog和fsimage文件组成。


editlog文件记录对文件系统的写操作,fsimage存放文件系统的元数据信息。


最后也提出了一些问题,例如editlog文件个数的上限,editlog文件与fsimage文件的关系。


本文针对fsimage的一些原理进行总结。


【checkpoint】

hdfs运行过程中,文件系统的所有写操作日志都会记录到editlog文件中,久而久之,就会有大量的editlog文件。


为了避免这种情况的出现,hdfs会定期对这些操作日志进行合并,然后连同内存中记录的元数据信息一并写入文件,这个文件就是fsimage文件,而整个过程就是checkpoint。


由于editlog文件的合并过程会耗时比较长,如果在active namenode(后面均称之为ann)上执行可能会影响文件的正常读写,因此checkpoint通常由standby namenode(后面均称之为snn)触发,其大概流程为:


  • snn向ann请求下载最新的一批editlog文件

  • snn完成editlog文件的下载后,执行所有这些editlog文件中的操作,并更新在内存中记录的元数据信息

  • snn将内存中的元数据信息按一定的格式保存到fsimage文件中

  • snn将生成的fsimage上传到ann中

  • snn和ann删除各自老的editlog文件和fsimage文件


几个细节:

  • snn每次从ann下载完editlog文件,并执行这些editlog文件中的操作后,会保存最后一个事务的ID。这样,下次checkpoint时,从保存的最后一个事务ID到最新的事务ID,请求包含这个事务ID范围内的所有editlog文件。

  • 每次checkpoint写fsimage时,fsimage文件名中会包含上面提到的这个事务ID。




【文件删除策略】


checkpoint执行最后,会将老的editlog文件和fsimage文件删除,具体的删除依据由下面几个配置文件决定:



dfs.namenode.num.checkpoints.retained

fsimage文件的保留个数,默认值为2,也就是最多保存2个fsimage文件。



dfs.namenode.max.extra.edits.segments.retained

editlog文件保留个数,默认值为10000。



dfs.namenode.num.extra.edits.retained

editlog文件中保留的事务个数,默认值为1000000。


具体含义为:

每次checkpoint生成新的fsimage文件后,根据fsimage的保留个数,保留最新的几个fsimage文件,其余的都直接删除。

然后从这些保留的fsimage中,得到最小的事务ID,然后结合保留的事务数,保留的editlog文件数,计算出需要保留的editlog文件,并从这些文件中得到最小的事务ID,在该事务ID之前的所有editlog文件都将被删除。


例如:


checkpoint后最后一个事务ID为96796869,保留2个fsimage,因此删除之前的fsiamge;然后往前保留1000000个事务,即从95796870开始,事务ID比这个小的editlog文件都会被删除(包含95796870的editlog会被保留,即便该editlog文件的事务ID可能会比95796870小)。


【checkpoint的触发时机】

触发进行checkpoint的时机由这么几个配置项决定



dfs.namenode.checkpoint.period

执行checkpoint的最小时间间隔,默认为3600秒,即1小时。



dfs.namenode.checkpoint.txns

触发checkpoint的事务数,默认值为1000000。



dfs.namenode.checkpoing.check.period

检测是否满足上面两个条件的时间间隔,默认值为60秒。即1分钟检查一次啊上述两个条件只要符合其一,则执行checkpoint。


【fsimage文件查看】

fsimage以二进制数据写入,直接查看会不方便,因此hdfs提供了命令来查看fsimage文件中的内容,具体命令为:


hdfs oiv [arg]必选的参数有:-i,-inputFile <arg>    待查看的fsimage文件
可选参数有:-o,-outputFile <arg> 转换后保存的文件-p,-percessor <arg>    转换的格式,可选值有XML,FileDistribution,ReverseXML,Web,Delimited,默认为Web-delimiter <arg>       配合-p 指定为Delimited使用,




本文分享自微信公众号 - hncscwc(gh_383bc7486c1a)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部