网站备案信息被注销,免费企业自助建站平台,购买域名和空间,学做网站看什么#xff08;1#xff09;NameNode的内存中保存了庞大的目录树结构#xff0c;这个结构用来保存文件目录结构和文件Block之间的映射#xff0c;这种结构关系会固化在磁盘上#xff0c;但是对树的改动频繁发生#xff0c;什么时候将树写入磁盘呢#xff1f;把每次操作应用…1NameNode的内存中保存了庞大的目录树结构这个结构用来保存文件目录结构和文件Block之间的映射这种结构关系会固化在磁盘上但是对树的改动频繁发生什么时候将树写入磁盘呢把每次操作应用到内存中的树上并把操作记录成日志文件每次操作不会改变固化在磁盘上的改动发生之前的目录树适当的时候做一次固化操作并记录时间。 2NameNode上面的磁盘目录结构 [hadooplocalhost dfs]$ ls -R name name:current image in_use.lockname/current:edits fsimage fstime VERSIONname/image:fsimage in_use.lock的功能和DataNode的一致。fsimage保存的是文件系统的目录树edits则是文件树上的操作日志fstime是上一次新打开一个操作日志的时间long型。NameNode成功载入一次fsimage就要把这个时刻记录在fstime中fstime表示edits第一条记录开始记录的时刻。saveImage的时候需要先写入中间文件防止中途断电。 image/fsimage是一个保护文件防止0.13以前的版本启动0.13以前版本将fsimage存放在name/image目录下如果用0.13版本启动显然在读fsimage会出错J。也就是说写入fsimage要有两份。 3管理NameNode磁盘目录的是FSImage也是继承Storage类的和DataStorage类似有升级回退机制暂时不考虑。 4FSImage需要支持参数-importCheckpoint该参数用于在某一个checkpoint目录里加载HDFS的目录信息并更新到当前系统该参数的主要功能在方法doImportCheckpoint中。该方法很简单通过读取配置的checkpoint目录来加载fsimage文件和日志文件然后利用saveFSImage下面讨论保存到当前的工作目录完成导入。 5loadFSImage用来在多个目录中选择最新的fsimage和edit来载入最新以及fsimage和edit的一致性由fstime保证载入过程中对NameNode崩溃的处理要分析saveFSImage的过程在明白。 6saveFSImage()的功能正好相反它将内存中的目录树持久化很自然目录树持久化后就可以把日志清空。saveFSImage()会创建edits.new并把当前内存中的目录树持久化到fsimage.ckptfsimage现在还存在然后重新打开日志文件edits和edits.new这会导致日志文件edits和edits.new被清空。最后saveFSImage()调用rollFSImage()方法。 rollFSImage()上来就把所有的edits.new都改为edits经过了方法saveFSImage它们都已经为空然后再把fsimage.ckpt改为fsimage。 7saveFSImage和loadFSImage为了考虑NameNode突然崩溃的情况使磁盘固化操作得以回滚创建了中间状态中间状态的描述方式就是在磁盘上建立临时文件。转载于:https://www.cnblogs.com/JohnLiang/archive/2011/11/10/2244392.html