apache ozone详细介绍

news2024/11/27 0:24:23

 

Ozone是哪路神

Apache Ozone

https://github.com/apache/ozone

 

Ozone是Apache软件基金会下的一个项目,其定位是:一个用户大数据分析和云原生应用、具有高扩展性、强一致性的分布式Key-Value对象存储。

 

HDFS是业界默认的大数据存储系统,在业界的大数据集群中有非常广泛的使用。HDFS集群有着很高的稳定性且易扩展得益于它较简单的构架,但包含几千个节点,保存上百拍比特(PB)数据的集群也不鲜见。我们简单来回顾一下HDFS的构架,如图1所示。

图片

▲图1 HDFS构架

HDFS通过把文件系统元数据全部加载到数据节点Namenode内存中,给客户端提供了低延迟的元数据访问。由于元数据需要全部加载到内存,所以一个HDFS集群能支持的最大文件数,受Java堆内存的限制,上限大概是4亿~5亿个文件。所以HDFS适合大量大文件[几百兆字节(MB)以上]的集群,如果集群中有非常多的小文件,HDFS的元数据访问性能会受到影响。虽然可以通过各种Federation技术来扩展集群的节点规模,但单个HDFS集群仍然没法很好地解决小文件的限制。

 

HDFS系统的确在集群扩展性、支持应用标准上的确存在一些局限性。

为了解决HDFS存在的问题,开源社区这些年也没闲着,尝试了不少解决方案。

HDFS的“联邦”时代

最初Hadoop集群只允许有一个命名空间(Namespace),且只能被一个NameNode管理。

虽然可以通过添加底层DataNode节点实现集群横向扩展,增加存储空间,但由于所有的Block元数据都驻留在NameNode内存中,在集群规模增大时,NameNode很容易成为瓶颈,直接限制了HDFS的文件、目录和数据块的数量。

Hadoop 社区为了解决HDFS 横向扩展的问题,做了两个联邦方案(如上图):

·
NNF(NameNode Federation)

·
RBF(Router Based Federation)

早期的NNF方案中,集群引入了多个NameNode,分别管理不同的Namespace和对应的BlockPool,多个NameNode可以共享Hadoop集群中的DataNode。

虽然解决了Namespace的扩展问题,但需要对HDFS的Client进行“静态”配置挂载,还要结合ViewFS才能实现统一入口。

而在RBF的联邦方案中,尝试把“挂载表”从Client中抽离出来形成了Router,虽然Hadoop集群是独立的,但同时又增加了一个“State Store”组件,架构变得更复杂。

局部改进的“联邦”方案对于面向未来的大数据存储而言,治标不治本。

 

基于这些背景,Hadoop社区推出了新的分布式存储系统Ozone。Ozone能够轻松管理小文件和大文件,是一个分布式Key-Value对象存储系统。

01基本概念

对象存储是一种数据存储,每个数据单元存储为离散单元(称为对象)。对象可以是任何类型、任何大小的数据。语义上,对象存储中的所有对象都存储在单个平面地址空间中,没有文件系统的层次结构。实现中,为了支持多用户及用户隔离,更好地管理和使用对象,通常对象存储也会在平面的地址空间中划分出几个层次。这些层次是由对象存储的实现确定的,每个层次都有特定的语义,用户不能更改。

Ozone的对象层次分三个层次,从上到下依次是Volume(卷),Bucket(存储桶)和Object(对象),如图2所示。

图片

▲图2 Ozone的对象层次

1、Volume(卷)

Volume类似Amazon S3中用户账户的概念,是用户的Home目录。Volume只有系统管理员才可以创建,是存储管理的单位,比如配额管理。Ozone建议系统管理员为每个用户都单独创建独立的Volume。Volume用来存储Bucket,目前一个Volume下面可以包含任意多个Bucket。

2、Bucket(存储桶)

存储桶是对象的容器,概念类似于S3的Bucket,或者Azure中的Container。存储桶创建于Volume下,只能属于一个Volume,创建后归属关系不可更改,也不支持更改存储桶的名字。Amazon S3的存储桶名称是全局唯一的,并且命名空间由所有AWS账户共享。这意味着,在创建存储桶之后,任何AWS区域中的其他AWS账户均不能使用该存储桶的名称,直至删除该存储桶。在Ozone中,存储桶名称只需要确保在本Volume内部是唯一的。不同的Volume可以创建名称相同的存储桶。

3、Object(对象)

对象存储在存储桶中,是键+值的存储。键是对象的名称,值是对象的内容。对象的名称在所属存储桶中必须是唯一的。对象有自己的元数据,包括值的大小、创建时间、最后一次修改时间、备份数、访问控制列表ACL等。对象的大小没有限制。

Ozone支持URL以虚拟主机方式的访问Ozone的对象。它采用如下格式:

复制

[scheme][bucket.volume.server:port]/key

​其中,scheme可以选:1)o3fs,通过RPC协议访问Ozone。2)HTTP/HTTPS,通过HTTP协议访问Ozone REST API。当scheme省略时,默认使用RPC协议。server:port是Ozone Manager的地址。如果没有指定,则使用集群的配置文件ozone-site.xml中“ozone.om.address”值。如果配置文件中也没有定义,则默认使用“localhost:9862”。

02技术架构

​Ozone技术构架分为三个部分:Ozone Manager,统一的元数据管理;Storage Container Manager,数据块分配和数据节点管理;Datanode,数据节点,数据的最终存放处,如图3所示。类比HDFS的构架,可以看到原来的Namenode的功能,现在由Ozone Manager和Storage Container Manage分别进行管理。对象元数据空间和数据分布分开管理,有利于两者的独立按需扩展,避免之前Namenode单节点的压力。

图片

▲图3 Ozone技术构架

 

Ozone主要模块和功能如下。

1、Ozone Manager(OM)

Ozone Manager是管理Ozone的命名空间,提供所有的Volume(卷)、Bucket(存储桶)和Key(键)的新建、更新和删除操作。它存储了Ozone的元数据信息,这些元数据信息包括Volumes、Buckets和Keys,底层通过RATIS(实现了RAFT协议)扩展元数据的副本数来实现元数据的HA。Ozone Manager只和Ozone Client和Storage Container Manager通信,并不直接和Datanode通信。Ozone Manager将命名空间的元数据存储在RocksDB中,避免了HDFS中需要将所有元数据都保留在内存,从而经常会受到小文件问题的困扰。RocksDB是Facebook基于LevelDB开发的一个本地Key-Value存储引擎,尤其对于SSD有很多的优化和改进,提供高吞吐量的读写操作。

2、Storage Container Manager(SCM)

SCM类似HDFS中的Block Manager,管理Container,写Pipelines和Datanode,为Ozone Manager提供Block和Container的操作和信息。SCM也监听Datanode发来的心跳信息,作为Datanode Manager的角色,保证和维护集群所需的数据冗余级别。SCM和Ozone Client之间没有通信。

3、Block、Container和Pipeline

Block是数据块对象,真实存储用户的数据。Container中的一条记录是一个Block的信息,每个Block在Container里面有且仅有一条记录,如图4所示,在Ozone中,数据是以Container为粒度进行副本复制的。SCM中目前支持2种Pipeline方式,由单Datanode节点组成的Standalone读Pipeline,和由三个Datanode节点组成的Apache RATIS写Pipeline。Container有2种状态,OPEN和CLOSED。当一个Container是OPEN状态时,可以往里面写入新的Block。当一个Container达到它预定的大小时(默认5GB),它从OPEN状态转换成CLOSED状态。一个Closed Container是不可修改的。

图片

▲图4 Datanode Container内部结构

由三个Datanode节点组成的Apache RATIS写Pipeline,保证数据一旦落盘,后续总能读到最新的数据,数据是强一致的,并且每份数据有3个备份,不用担心由于单个磁盘故障导致的数据丢失,如图5所示。

图片

▲图5 RATIS写Pipeline

4、Datanode

Datanode是Ozone的数据节点,以Container为基本存储单元维护每个Container内部的数据映射关系,并定时向SCM发送心跳节点、汇报节点的信息、管理Container的信息和Pipeline的信息。当一个Container大小超过预定大小的90%时或者写操作失败时,Datanode会发送Container Close命令给SCM,把Container的状态从OPEN转变成CLOSED。或者当Pipeline出错时,发送Pipeline Close命令给SCM,把Pipeline从OPEN状态转为CLOSED状态。

5、分层管理

Ozone分层结构使得Ozone Manager、Storage Container Manager和Datanode可按需独立扩展。对于Ozone提供的语义,也是分层管理的,如图6所示。

图片

▲图6 Ozone语义与对应的管理模块

​6、对象创建

当Ozone Client(客户端)需要创建并且写入一个新对象时,客户端需要和Ozone Manager和Datanode直接打交道,具体过程如图7所示。

图片

▲图7 创建Ozone新对象

1)Ozone客户端链接Ozone Manager,提供需要创建的对象信息,包括对象的名称、数据的大小、备份数和其他用户自定义的对象属性。

2)Ozone Manager收到Ozone客户端的请求后,和SCM通信,请求SCM寻找能够容纳数据的处于OPEN状态的Container,然后在找到的Container中分配足够数量的Block。

3)SCM将新对象数据将要写入的Container、Block和Container所在的Pipeline的三个Datanode的信息列表返回给Ozone Manager。

4)Ozone Manager将收到SCM返回的信息,返回给客户端。

5)客户端得到Datanode列表信息之后,和第一个Datanode(Raft Pipeline Leader)建立通信,将数据写入Datanode的Container。

6)客户端完成数据写入后,连接Ozone Manager,确认数据已经更新完成,Ozone Manager更新对象的元数据,记录对象数据所在的Container和Block的信息。至此,新的对象创建完成。之后,其他的客户端就可以访问这个对象了。

7、对象读取对象读取的过程相对简单,类似于HDFS的文件读,如图8所示。

图片

▲图8 读取Ozone对象

1)Ozone Client(客户端)和Ozone Manager通信,制定要读取的对象Key (/volume/bucket/key)。

2)Ozone Manager在元数据库中查找对应的对象,返回对象数据所在的Container和Block信息,包括Container所在的Datanode列表信息给Ozone Client(客户端)。

3)Ozone支持Data locality。如果Ozone Client(客户端)运行在集群中的某个节点上,Ozone Manager会返回按照网络拓扑距离排序的Datanode列表。Ozone Client(客户端)可以选择第一个Datanode节点(本地节点),也是离Client(客户端)最近的节点来读取数据,节省数据读取的网络传输时间。

工作负载的多样性

当今快速增长的数据密集型工作负载推动了分析、机器学习、人工智能和智能系统,需要一个既灵活又高效的存储平台。Apache Ozone 原生提供与 Amazon S3 和 Hadoop 文件系统兼容的端点,旨在与企业级数据仓库、批处理、机器学习和流式工作负载无缝协作。根据与存储服务集成的性质,Ozone 支持各种工作负载,包括以下突出的存储用例:

  1. Ozone 作为纯 S3 对象存储语义
  2. Ozone 作为 HDFS 的替代文件系统来解决可扩展性问题
  3. Ozone 作为 Hadoop 兼容文件系统 (“HCFS”),具有有限的 S3 兼容性。例如,对于其中带有“/”的关键路径,将创建中间目录
  4. 多个工作负载的相同数据的互操作性:多协议访问

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/764447.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

ThunderScope开源示波器

简介 4CH,1GSa/S 开源示波器。前端很简洁,BUF802LMH6518,ADC是HMCAD1511,用Xilinx A7 FPGA进行控制,数据通过PCIE总线传输到上位机处理。目前这个项目已经被挂到了Xilinx官网,强。 设计日志:h…

设计自己的脚手架

如何设计自己的脚手架 前言前置知识如何搭建一个脚手架搭建自己的脚手架初始化项目安装依赖packagejson 配置lint 和typescript配置 加入bin字段调试npm link调试核心代码实现获取所有命令create实现 美化项目添加logo 发包源码仓库 前言 ​ 在工程中,不仅是软件工…

车载测试:CANoe中环境变量和系统变量的区别

目录 环境变量和系统变量相同点: 环境变量和系统变量不同点: 环境变量和系统变量相同点: 都可以作为ECU、面板和CAPL程序相连接的媒介。例如,在CAPL程序中,通过改变或监控某一环境变量的值可以触发特定的动作&#x…

Java处理doc类型的Word文档转换成html(按顺序保留格式+图片)

最新有个新需求,就是doc文档转换html内容倒不是很难,给大家分享一下,总体思路就是按doc转html的思路来走,唯一缺点是不会自动转换图片,图片是要手动转成base64,默认是有html、body、head、meta等等标签&…

基于深度学习的高精度农作物机器与行人目标检测系统(PyTorch+Pyside6+YOLOv5模型)

摘要:基于深度学习的高精度农作物机器与行人目标检测系统可用于日常生活中或野外来检测与定位农作物机器与行人目标,利用深度学习算法可实现图片、视频、摄像头等方式的农作物机器与行人目标检测识别,另外支持结果可视化与图片或视频检测结果…

查询自己档案存在哪里

查询自己档案存在哪里 百度搜索“全国人力资源和社会保障政务服务平台” 或者点击下方的官网链接登陆后点击“个人服务”,选择“档案存档情况查看”就可以看到自己的存档情况了。 全国人力资源和社会保障政务服务平台 http://zwfw.mohrss.gov.cn/portal/index

【Linux】生产者消费者模型 -- RingQueue

文章目录 1. 生产者消费者模型的理解1.1 生产者消费者模型的概念1.2 生产者消费者模型的特点1.3 生产者消费者模型的优点 2. 基于BlockQueue的生产者消费者模型 1. 生产者消费者模型的理解 1.1 生产者消费者模型的概念 生产者消费者模型就是通过一个容器来解决生产者和消费者的…

从iPhone恢复已删除音视频的5种主要方法

“我需要从iPhone恢复已删除的音视频。我真的很喜欢我的音视频文件。我玩了很多封面,并检查听我可以改进的地方和不可以改进的地方。 iPhone是我完成这项任务的首选手机,因为我喜欢保持非常简单,我喜欢听我的iPhone。但是,我确实删…

4.Cesium中实体Entity的增删改查及性能优化(超详细)

前言 Cesium 作为一个功能强大的 WebGL 三维地球仪库,内置了丰富的三维地图展示能力。在 Cesium 中,我们可以通过 Entity(实体)在三维场景中添加和控制各种三维对象,如点、线、面、模型等。本文将介绍 Cesium 中实体的增删改查操作。 概述 添加到场景中的实体都保存在 viewer.…

【AI绘画】Stable-Diffusion-Webui本地部署-简单绘画图片

这里写目录标题 前言一、Stable Diffusion是什么?二、安装stable-diffusion-webui1. python安装2. 下载模型3. 开始安装:4. 汉化:5. 模型使用:6. 下载新模型:7. 基础玩法 三、总结 前言 本文将借助stable-diffusion-w…

【idea】的一些使用指南

一、serializable自动生成id 1.打开File菜单,选择Settings选项 2.打开Editor->Inspections 3.在右边的搜索框中输入serialVersionUID关键字,出现以下选项,勾选"Serializable class without serialVersionUID",然后别…

攻不下dfs不参加比赛(十)

标题 为什么练dfs题目总结为什么练dfs 相信学过数据结构的朋友都知道dfs(深度优先搜索)是里面相当重要的一种搜索算法,可能直接说大家感受不到有条件的大家可以去看看一些算法比赛。这些比赛中每一届或多或少都会牵扯到dfs,可能提到dfs大家都知道但是我们为了避免眼高手低有…

非监督学习-K均值聚类-知识点扫盲

前言 在实际工作中,我们经常会遇到这样一类问题:给机器输入大量的特征数据,并期望机器通过学习找到数据中存在的某种共性特征或者结构,亦或是数据之间存在的某种关联。 例如,视频网站根据用户的观看行为对用户进行分组…

【MongoDB】SpringBoot整合MongoDB

【MongoDB】SpringBoot整合MongoDB 文章目录 【MongoDB】SpringBoot整合MongoDB0. 准备工作1. 集合操作1.1 创建集合1.2 删除集合 2. 相关注解3. 文档操作3.1 添加文档3.2 批量添加文档3.3 查询文档3.3.1 查询所有文档3.3.2 根据id查询3.3.3 等值查询3.3.4 范围查询3.3.5 and查…

8、gateway使用和原理

一、什么是Spring Cloud Gateway 1、网关简介 网关作为流量的入口,常用的功能包括路由转发,权限校验,限流等。 2、Gateway简介 Spring Cloud Gateway 是Spring Cloud官方推出的第二代网关框架,定位于取代 Netflix Zuul。相比 …

【iOS】编译与链接过程

前言 计算机语言分为:机器语言、汇编语言和高级语言。 高级语言又能分为:编辑语言、解释语言。 解释语言 解释语言编写的程序在每次运行时都需要通过解释器对程序进行动态解释和执行,即解释一条代码,执行一条代码。 优点&…

ADC 的初识

ADC介绍 Q: ADC是什么? A: 全称:Analog-to-Digital Converter,指模拟/数字转换器 ADC的性能指标 量程:能测量的电压范围分辨率:ADC能辨别的最小模拟量,通常以输出二进制数的位数表示,比如&am…

一百三十、海豚调度器——用DolphinScheduler定时调度HiveSQL任务

一、目标 用海豚调度器对Hive数仓各层数据库的SQL任务进行定时调度。比如,DWD层脱敏清洗表的动态插入数据、DWS层指标表的动态插入数据 二、工具版本 1、海豚调度器:apache-dolphinscheduler-2.0.5-bin.tar.gz 2、Hive:apache-hive-3.1.2…

随手笔记——Sophus的基本使用方法

随手笔记——Sophus的基本使用方法 说明CMakeLists.txt补充:关于 ADD_SUBDIRECTORY 的使用使用CMakeLists执行顺序 源代码 说明 Sophus 库支持SO(3) 和SE(3),此外还含有二维运动 SO(2),SE(2) 以及相似变换 Sim(3) 的内容。它是直接在 Eigen …

数据结构--图的存储邻接矩阵法

数据结构–图的存储邻接矩阵法 无向图: 有向图: #define MaxVerTexNum 100 //顶点数目的最大值 typedef struct {char vex[MaxVerTexNum]; //顶点表int Edge[MaxVerTexNum][MaxVerTexNum]; //邻接矩阵,边表int vexnum, arcnum; //图的当前顶…