Ozone Manager(OM)管理 Ozone 的命名空间。
当向 Ozone 写入数据时,你需要向 Ozone Manager 请求一个块,Ozone Manager 会返回这个块并记录下相关信息。当你想要读取那个文件时,你则需要先通过 Ozone Manager 获取那个块的地址。
Ozone Manager 还允许用户在卷和桶下组织键,卷和桶都是命名空间的一部分,也由 Ozone Manager 管理。
每个卷都是 OM 下一个独立命名空间的根,这一点和 HDFS 不同,HDFS 提供的是单个根目录的文件系统。
Ozone 的命名空间是卷的集合,或者可以看作是相对于 HDFS 单根树状结构的森林。因此,Ozone 可以非常容易地支持部署多个 OM 来进行扩展(待未来开发)。
OM 维护了卷、桶和键的列表。它为每个用户维护卷的列表,为每个卷维护桶的列表,为每个桶维护键的列表。
Ozone Manager 使用 Apache Ratis(一种 Raft 协议的开源实现)来复制 Ozone Manager 的状态,这为 Ozone 提供了高可用保证。
我们可以通过跟踪一个键的读写过程来方便地理解 Ozone Manager 和 Storage Container Manager 之间的关系。
为了向 Ozone 中写入键,客户端需要告诉 Ozone Manager 将键写入哪一个卷下的哪一个桶中。一旦 Ozone Manager 确认了允许您向该桶中写入键,则 OM 需要分配一个块用于客户端写入数据;
为了分配一个用于写入的块,Ozone Manager 会向 Storage Container Manager(SCM) 发送一个请求。 SCM 作为数据节点的管理器,会选取三个可用于客户端写入的数据节点,然后分配块并将块 ID 返回给 Ozone Manager ;
Ozone Manager 会将块的信息记录在它的元数据当中,并将块和块令牌(将数据写入块的安全权限)返回给客户端;
客户端使用块令牌来证明自己有权限向该块写入数据,并且将数据写入对应的数据节点;
数据写入完成以后,客户端就会向 Ozone Manager 中更新该块的信息。
键的读取相对比较简单,客户端首先向 Ozone Manager 请求该键的块列表;
Ozone Manager 会返回块列表以及对应的块令牌,允许客户端从数据节点读取数据;
客户端连接到数据节点,并提供对应的块令牌,然后从数据节点上读取数据即可。
为了详细地了解 Ozone Manager ,本节针对它所提供的网络服务和持久化状态提供一个快速概述。
Ozone 为客户端和管理命令提供网络服务,主要的服务如下:
以下数据将保存在 Ozone Manager 端的指定 RocksDB 目录中:
配置项 | 默认值 | 描述 |
---|---|---|
ozone.om.address | 0.0.0.0:9862 | OM 的 RPC 地址,客户端需要用到 |
ozone.om.http-address | 0.0.0.0:9874 | 默认的 HTTP Server 地址和端口 |
ozone.metadata.dirs | none | 存储持久化数据的目录(RockDB) |