leo_1989 发表于 2013-10-25 10:44:51

关于NameNode内存中的FsImage数据更新问题

我有一个疑问,在namenode的内存中记录了fsimage信息,但是内存中的fsimage元数据是在namemode启动时去合并本地的editlog和fsimage得到的,这样的话就存在以下:
1. 如果namenode一直不重新启动的话,那么如何保证内存中的fsimage是最新的呢吗?
2.在最新的hdfs版本中是否支持周期性的去合并本地editlog和fsimage信息吗?
3.本地的fsimage中的元数据是在什么时候写入的吗?新建文件的时候会向editlog中记录日志,是在这个时候把元数据写入到fsimage中的吗吗?如果是,那么editlog为什么还要和fsimage进行合并吗?因为editlog中记录的元数据,在fsimage中都已经有了。
那位能帮忙解答下,不胜感激。

ruanhero 发表于 2013-10-25 10:44:51

个人理解是这样的:
对于前两个,hdfs现在有一个secondary namenode机制专门解决前两个,在时间上来说,默认是1个小时更新一次,在空间上来说,默认是小于64M。这一机制周期性的合并fsimage和editlog,始终保存最新的检查点,加快hadoop下一次启动的速度并且作为最新元数据信息的一个备份。
对于第三个,有一个检查点的机制,检查点始终记录上一次机器启动以后针对hdfs所有的操作,所以在下一次hadoop重启时,会将fsimage和editlog中的数据合并,“新建文件的时候会向editlog中记录日志,是在这个时候把元数据写入到fsimage中的吗吗?”的回答是否定的,只有在hadoop重启的时候才会写入(在没有使用secondary namenode机制的情况下)。
页: [1]
查看完整版本: 关于NameNode内存中的FsImage数据更新问题