前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0918-Apache Ozone简介

0918-Apache Ozone简介

作者头像
Fayson
发布2024-04-30 12:26:01
3310
发布2024-04-30 12:26:01
举报
文章被收录于专栏:Hadoop实操

Ozone 是 Hadoop 的分布式对象存储系统,具有易扩展和冗余存储的特点。Ozone 不仅能存储数十亿个不同大小的对象,还支持在容器化环境(比如 Kubernetes)中运行。Apache Spark、Hive 和 YARN 等应用无需任何修改即可使用 Ozone。Ozone 提供了 Java API、S3 接口和命令行接口,极大地方便了 Ozone 在不同应用场景下的使用。

HDFS面对大文件时,表现极佳,但是一直受到小文件的困扰。Ozone 是一种分布式key-value对象存储,可以同时管理大文件和小文件。Ozone 原生支持 S3 API,并提供与 Hadoop 兼容的文件系统接口。CDP Private Cloud Base中包含了Ozone组件,可以通过Cloudera Manager进行部署,管理和维护。

1.Ozone存储元素

  • • Volumes(卷):卷与帐户类似,卷只能由管理员创建或删除,管理员为组织或团队创建卷。
  • • Buckets(桶):桶的概念和目录类似,Ozone bucket类似Amazon S3的bucket,用户可以在自己的卷下创建任意数量的桶,每个桶可以包含任意数量的键,但是不可以包含其它的桶。
  • • Keys(键):键的概念和文件类似,每个键是一个bucket的一部分,键在给定的bucket中是唯一的,类似于S3对象,Ozone将数据作为键存储在bucket中,用户通过键来读写数据。

当客户端写入key时,Ozone将数据以多个chunk的形式保存到DataNode上,称为block,一个Block包含多个Chunk,Chunk是客户端数据读写的基本单位。因此每个key都与一个或多个block相关联,在 DataNode 内,多个不相关的block可以驻留在storage container中。

2.Ozone的主要特性

  • • Consistency(一致性):Ozone是一种强一致性的分布式存储,其一致性通过使用像RAFT这样的协议来实现。
  • • Architectural simplicity(架构简单):简单的架构易于使用,并且在出现问题时易于调试,同时易于扩展,Ozone旨在在单个集群中存储超过 1000 亿个对象。
  • • Layered architecture(分层架构):Ozone将命名空间管理与块和节点管理分开,允许用户在两个维度上独立扩展。
  • • Easy recovery(恢复简单):Ozone像HDFS一样具有高容错性,可以轻松从灾难性事件(例如集群范围内断电)中恢复,而不会丢失数据,也无需昂贵的恢复步骤。
  • • Open source in Apache:Apache 开源社区对于 Ozone 对象存储的成功至关重要,所有 Ozone 设计和开发都在 Apache Hadoop 社区中完成。
  • • Hadoop生态支持:原生支持Hadoop生态圈的计算引擎如Hive,Spark和MapReduce。

1 Ozone架构

Ozone 将命名空间和存储的管理分开,从而方便扩展。Ozone Manager (OM) 管理命名空间,而 Storage Container Manager (SCM) 管理容器。存储在 OM,SCM 和数据节点上的所有元数据都需要存储在 NVME 或 SSD 等低延迟磁盘中。下图是Ozone的基础架构组成:

1.Ozone Manager

Ozone Manager (OM) 是一个高可用的命名空间管理服务,它管理卷、存储桶和key的元数据,OM维护key与其对应的block ID之间的映射。当客户端应用程序请求key来执行读写操作时,OM 与 SCM 交互以获取相关的block信息,并将该信息反馈给客户端。OM 使用 Apache Ratis来复制 Ozone Manager状态。当 RocksDB(嵌入式存储引擎)保存元数据或键空间(keyspace)时,会将 Ratis 事务flush到本地磁盘以确保持久化。因此每个OM都需要配备NVME或者SSD低延迟的存储设备,同时可以确保最大吞吐,典型的Ozone集群一般都会部署三个OM节点。

2.DataNode

DataNode 存储客户端写入的数据块,这些块的集合称为一个storage container。对于一个block,客户端以一个固定的chunk文件大小(4MB)传输数据,这些chunk文件最终是被写入磁盘。DataNode以固定的时间间隔向SCM发送心跳,每次心跳时,DataNode 都会发送容器报告。DataNode 中的每个storage container都有自己的 RocksDB 实例,用于存储block和chunk文件的元数据。每个 DataNode 都可以是一个或多个活动管道的一部分,这个管道实际上是一个 Ratis 仲裁,包含选举出来的leader DataNode,以及follower的DataNodes(接受数据写入)。但来自客户端的读取直接进入 DataNode,而不用通过 Ratis。DataNode上也需要配备SSD高速磁盘来保存活动管道的 Ratis 日志并提高写入吞吐量。

3.Storage Container Manager

storage container是Ozone中的复制单元,而HDFS的复制单元则直接是block,Ozone是将block装在了container中,container的默认大小为5GB。SCM 管理 DataNode 管道以及管道上容器的放置,管道是基于复制因子的DataNode 的集合。假设默认复制因子为 3,则每个管道包含三个 DataNode。SCM 负责创建和管理发生块分配的 DataNode 的活动写入管道。

客户端直接将block写入DataNode上打开的container,SCM并不直接位于数据路径上,容器在关闭后是不可变的。 SCM 使用 RocksDB 来保存管道元数据和容器元数据,与 OM 管理的键空间(keyspace)相比,此元数据要小得多。

SCM是一个使用Apache Ratis 的高可用组件,建议在SCM节点上为Ratis WAL和RocksDB配置SSD高速磁盘,生产Ozone集群建议部署三个SCM节点。

  1. 4. Recon Server

Recon 是 Ozone 集群内的集中式监控和管理服务,如管理和维护OM和SCM的元数据信息。Recon 会拍摄 OM 和 SCM 元数据的快照,同时还接收来自 DataNode 的心跳。Recon 根据集群的繁忙程度以增量方式异步构建集群完整状态的快照,Recon 通常在更新 OM 元数据快照方面落后 OM 一些事务。建议使用SSD来维护快照信息,这样可以让Recon的快照信息尽量追上OM的事务更新。

5.Ozone File System Interfaces

Ozone 是一个多协议存储系统,支持以下接口:

  • • s3: Amazon’s Simple Storage Service (S3) 协议,你可以直接使用S3客户端和基于S3 SDK的应用程序通过Ozone S3 Gateway访问Ozone中的数据。
  • • o3:Ozone shell 使用的对象存储接口。
  • • ofs:兼容Hadoop的文件系统(Hadoop-compatible filesystem,HCFS),访问通过HDFS API访问数据的应用程序访问Ozone,如Spark和Hive。
  • • o3fs:已弃用,不推荐,基于存储桶的 Hadoop 兼容文件系统 (HCFS) 接口。

6.S3 Gateway

S3 gateway一个无状态组件,可通过 HTTP 提供对 Ozone 的 REST 访问,并支持与 AWS 兼容的 s3 API。 S3网关支持分段上传和加密区域(encryption zone)。此外,S3 gateway将通过 HTTP 的 s3 API 调用转换为对其他 Ozone 组件的 rpc 调用。为了扩展S3访问,建议部署多个S3 gateway节点,并在之上部署负载均衡如haproxy。

2 Ozone containers

container是Ozone 的基本复制单元,由SCM服务进行管理,container是大型的二进制单元,默认5GB,可以包含多个block。SCM并不管理block的本地信息,因此即使系统中创建了数十亿个小文件(即数十亿block),DataNode 也只会报告容器的状态。每当 Ozone Manager 向 SCM 请求新的block分配时,SCM 都会识别合适的容器并生成包含 ContainerId 和 LocalId 的block id。客户端连接到存储容器的DataNode,DataNode根据LocalId管理block。

Open vs closed containers

Open

Closed

mutable

immutable

replicated with RAFT (Ratis)

Replicated with async container copy

Write: Allowed only on Raft Leader

Write: No writes are allowed

Read: On all replicas

Read: On all replicas

Deletes: Not allowed

Deletes: allowed

3 Ozone 如何管理读取操作

客户端请求与其想要读取的key相对应的block位置,如果客户端具有所需的读取权限,Ozone Manager (OM) 将返回block位置。

1.客户端向 OM 请求与要读取的key对应的block位置。

2.OM 检查 ACL 以确认客户端是否具有所需的权限,并返回允许客户端从 DataNode 读取数据的block位置和block token。

3.客户端连接到与返回的Block ID关联的DataNode并读取数据块。

4 Ozone如何管理写操作

客户端向 Ozone Manager (OM) 请求block来写入key,OM返回Block ID和对应的DataNode供客户端写入数据。

1.客户端向 OM 请求块来写入key,该请求包括key、管道类型和复制计数。

2.OM 找到与 SCM 请求匹配的block并将它们返回给客户端。

  • • 如果集群启用了安全,OM 还会向客户端提供block token以及block位置。客户端使用block token连接到DataNode并发送命令以写入chunks。

3.客户端连接到与返回的block信息关联的DataNode并写入数据。

4.写入数据后,客户端通过发送提交请求来更新OM上的block信息。

5.OM记录相关的key信息。在 OM 提交与key关联的block信息之前,Ozone 中的key不可见。 客户端通过提交请求在 DN 上写入block后,负责将key-block信息发送给 OM。

5 Ozone 如何管理删除操作

Ozone是一个一致性的对象存储,删除请求完成后,Ozone Manager 会从活动命名空间中删除该key,并将该文件标记为垃圾回收。Ozone也遵循异步删除的原理,在大多数文件系统中,垃圾回收和释放存储空间的机制是异步管理的,以确保删除操作不会与读取和写入操作冲突。

Ozone Manager 中标记为已删除的文件由container聚合,并向 SCM 发送删除block的请求。 然后SCM 将请求转发到 DataNode 以从磁盘释放实际空间。block删除仅发生在closed的container上,例如如果删除命名空间中的对象,则删除操作仅反映在closed容器中的相应block。对于状态不是 CLOSED 的容器中存在的block,仅在容器达到 CLOSED 状态后才会进行删除。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-04-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Hadoop实操 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1 Ozone架构
  • 2 Ozone containers
  • 3 Ozone 如何管理读取操作
  • 4 Ozone如何管理写操作
  • 5 Ozone 如何管理删除操作
相关产品与服务
对象存储
对象存储(Cloud Object Storage,COS)是由腾讯云推出的无目录层次结构、无数据格式限制,可容纳海量数据且支持 HTTP/HTTPS 协议访问的分布式存储服务。腾讯云 COS 的存储桶空间无容量上限,无需分区管理,适用于 CDN 数据分发、数据万象处理或大数据计算与分析的数据湖等多种场景。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档