hdfs名字节点实现

命名空间镜像和编辑日志

内存中的HDFS目录树及文件/目录元信息由INode及其子类保存,如果节点掉电或进程崩溃,数据将不再存在,因此,必须将上述信息保存到磁盘。命名空间镜像保存某一个时刻目录树的信息,它在HDFS中实现为类FSImage,是内存元数据和磁盘元数据间的桥梁。对内存目录树的修改,也必须同步到磁盘元数据上,但每次修改都将内存元数据导出到磁盘,显然是不现实的,为此,名字节点引入了镜像编辑日志,将改动保存在日志中,形成了命名空间镜像和编辑日志的备份机制,其中,命名空间镜像是某一个时间点内存元数据的真实组织情况,而编辑日志则记录了该时刻以后所有元数据操作。
名字节点根目录结构
目录“current”的结构
通常,这个目录有4个文件,它们分别是:
fsimage:元数据镜像文件。
edits:日志文件,和元数据镜像文件一起,提供了一个完整的HDFS目录树及元信息。
fstime:保存了最近一次检查点的时间,检查点一般由第二名字节点产生,是一次fsimage和对应edits合并的结果。
VERSION:和数据节点类似,该文件保存了名字节点存储的一些属性。

第二名字节点

第二名字节点根目录结构和目录“current”的结构
产生检查点时的第二名字节点根目录结构
FSImage.saveNamespace()持久化内存元数据到磁盘中,创建命名空间镜像,即检查点。这个方法关键步骤如下:
1)关闭日志输出流(注意,这个方法同时也被名字节点使用,第二名字节点不关注日志输出流),记录这次检查点的产生时间。
2)目录改名,将“current”目录名改为“lastcheckpoint.tmp”。
3)建立新的“current”目录,并使用FSImage.saveCurrent()输出命名空间镜像,即检查点,saveCurrent()的最后会写“VERSION”文件和“fstime”文件。
4)再次调用saveCurrent()方法创建新的日志输出流(所以,大家会在第二名字节点的“current”目录下看到一个空的“edit”文件,大小为4字节)。
5)将目录“lastcheckpoint.tmp”名改为“previous.checkpoint”。
6)设置检查点状态为CheckpointStates.UPLOAD_DONE。
产生检查点时的第二名字节点根目录结构

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值