Ozone Datanode的分布式元数据管理

本文介绍了Ozone的分布式元数据管理,与HDFS的集中式元数据管理不同,Ozone的Datanode存储了block对chunk文件的信息,元数据分布在各个节点上。客户端通过查询Datanode的本地db文件获取chunk位置。详细讨论了Datanode的数据布局、元数据存储和数据处理操作,包括写入过程中的一致性保证。

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

前言


众所周知,当元数据空间达到一个比较庞大的规模量级的时候,HDFS会遇到一定的扩展性问题。首先HDFS将这些元数据INode信息都load在内存中进行管理,而且还有附属相关的mapping信息,这些庞大的信息被HDFS的NameNode所管理。相应地,NameNode也将会面临更大规模量级的请求处理。从更本质的层面上来说,这是集中中心管理式服务会遇到的一个问题。不同于HDFS的集中纯内存元数据管理方式,本文将介绍另外一种扩展性更强的Ozone分布式元数据管理方式。

Ozone的分布式元数据


首先,这里有个概念,何为分布式元数据?简单地来说,就是系统的元数据分散地存储于各个节点上。那么有人肯定会有疑问了,那我们如何做具体元数据的位置查询呢?难道不是应该有个更加集中式的管理服务来查询这些元数据的关系吗?

这里其实有个问题,如果我们还需要有个集中式的管理服务来管理这些分布式元数据,那这样的设计模式又退化到和集中式管理服务一样的模式了。

在Ozone的每个Datanode中,存储有上面所有block对chunk文件的信息。而另外一半的block在什么节点上这样的信息,是由另外的服务来告诉client的。也就是说,client只要知道它所请求的文件block信息在这个节点就可以了,后面这个block具体对应的chunk物理文件在什么位置,查询Datanode的本地db文件即可。在HDFS中,像这种大量的具体block对文件的映射信息都是集中被NameNode所管理,在Ozone中,这样的集中元数据变成了分布式元数据的模式了。

Ozone Datanode数据的layout


既然Ozone的元数据是分布式地存储于各个Datanode节点之上的,下面我们来具体看看Datanode实际的数据layout,包括用户数据以及元数据,比HDFS Datanode多了元数据目录。

笔者在测试Ozone集群内,创建了一个测试volume,buckt,然后put了一个测试文件。通过查询文件所属的Container的实际位置,就能找到它所在的实际节点位置了。

Datanode的Container目录格式如下所示:

<<dfs.datanode.dir>>/hdds/<>/current/

笔者测试集群的一个实际目录如下:

[hdfs@lyq ~]$ ls -l /tmp/hadoop-hdfs/dfs/data/hdds/762187f8-3d8d-4c2c-8659-9ca66987c829/current/
total 4
drwxr-xr-x 3 hdfs hdfs 4096 Dec 24 07:56 containerDir0

这里的containerDir0是Container按照Container Id做partition的,分partition目录是为了防止一个目录下游过多的文件。然后紧接着partition目录的是Container Id目录。

[hdfs@lyq ~]$ ls -l /tmp/hadoop-hdfs/dfs/data/hdds/762187f8-3d8d-4c2c-8659-9ca66987c829/current/containerDir0/4/
total 8
drwxr-xr-x 2 hdfs hdfs 4096 Dec 24 07:56 chunks
drwxr-xr-x 3 hdfs hdfs 4096 Dec 24 07:56 metadata

以上2个目录中,chunks代表的即Co

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值