HDFS原理加强之---元数据管理和checkpoint

本文详细介绍了HDFS的元数据管理,包括元数据的存储位置、内存与磁盘的优缺点,以及解决宕机数据丢失问题的日志机制。同时,阐述了SecondaryNamenode在checkpoint过程中的作用,如何定期合并fsimage和edits以确保数据一致性,并讨论了edits日志的位置选择,强调其在集群中的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

(元数据存储位置和存储策略)

1、元数据:

(1)元数据维护HDFS文件系统和虚拟访问目录的信息;namenode记录用户存储数据的数据元信息。

(2)元数据包括:数据切块描述信息、副本个数、存储位置、切块大小、文件权限等。

(3)元数据存储位置:/opt/hdpdata/data/current/BP-742774004-192.168.133.3-1597321931822/current/finalized/subdir0/subdir0

在这里插入图片描述

2、元数据的存储位置:(两种)

(1)内存:元数据存储在内存对象中;
优点:读写方便、速度快;
缺点:宕机会造成元数据丢失。

(2)磁盘:元数据存储在内存对象的序列化文件中;
优点:安全,机器宕机以后,反序列化修复数据;
缺点:每次序列化占用资源,影响性能。

在这里插入图片描述

3、需要考虑的问题:

(1)在主节点内存中的元数据,存储在FsImage对象中,以Tree的数据结构管理数据(方便目录维护)。

(2)但是内存空间有限,为保证宕机后数据的正确性,需要定期把存储元数据的FsImage对象序列化到磁盘进行持久化存储,但是每put一次都会影响性能,占用namenode资源。

(3)如果很长时间序列化一次,中途宕机会导致数据丢失,也不能保证数据信息记录完整。

4、解决问题:(1)日志

(1)用户对数据的操作记录到edits日志中,不需要每一次都进行持久化处理,节省资源;定期合并元数据文件fsimage0000+日志文件edits0000。

(2)宕机时,用上一次持久化的元数据文件+日志文件进行元数据的恢复。

(3)但是,随着时间增长,fsimage0000文件与元数据差异越来越大;用户操作增加,日志数据也越来越大;宕机重启后加载日志数据会花费大量时间,期间用户无法进行操作。

注:日志 —> 追加写,滚动生成,存放在磁盘。

fsimage0000和edits0000是FsImage对象和日志经过序列化存储到磁盘上的文件。

4、解决问题:(2)SecondaryNamenode

引入SecondaryNamenode对元数据进行处理(checkpoint机制)。SecondaryNamenode是一个新的进程,相当于namenode的一个小弟,专门干合并的事情的。

(1)namenode启动,初始化,生成FsImage目录结构文件,记录HDFS的元数据信息;生成edits日志文件,记录用户对HDFS数据的所有写操作(读操作不会记录)。

(2)SecondaryNamenode启动,下载namenode的FsImage0000文件,加载镜像文件,反序列化为FsImage内存对象。

(3)SecondaryNamenode下载日志文件,回放还原,更新到内存中,修改镜像对象。

(4)更新FsImage对象,持久化为fsimage0001镜像文件,再将上传到namenode。

(5)清除namenode中的没用的日志数据和序列化的镜像文件。

(6)每达到触发条件(默认1h或100w次操作)重复完成上述过程一次(checkpoint)。

4、解决问题:(3)edits位置

(1)如果edits日志文件和元数据都存放在主节点中,宕机时,日志文件也会随之消失;

(2)所以,edits日志文件也要存放在集群中,利用集群的高可靠性,完成用户的记录和元数据的恢复。

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值