apache ozone详细介绍

 

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.mfbz.cn/a/38835.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

零钱兑换 II(力扣)动态规划 JAVA

给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带符号整数。 示例…

git下载源码及环境搭建之前端(三)

学习目标: vue 新项目的 前端环境搭建 vue 项目在 使用 Visual Studio Code 开发前端项目环境的搭建及 相关文件的配置 操作步骤: 前端: 下图所示为开发时前端所用的编辑器 注意:在配置时 有时候 localhost 可能 不太好用&…

AN OVERVIEW OF LANGUAGE MODELS RECENT DEVELOPMENTS AND OUTLOOK

LLM系列相关文章,针对《AN OVERVIEW OF LANGUAGE MODELS: RECENT DEVELOPMENTS AND OUTLOOK》的翻译。 语言模型综述:近年来的发展与展望 摘要1 引言2 语言模型的类型2.1 结构化LM2.2 双向LM2.3 置换LM 3 语言单元3.1 字符3.2 单词和子单词3.2.1 基于统…

JVM——类加载和垃圾回收

目录 前言 JVM简介 JVM内存区域划分 JVM的类加载机制 1.加载 双亲委派模型 2.验证 验证选项 3.准备 4.解析 5.初始化 触发类加载 JVM的垃圾回收策略 GC 一:找 谁是垃圾 1.引用计数 2.可达性分析 (这个方案是Java采取的方案&#x…

金融数据库的战场,太平洋保险和OceanBase打了场胜仗

点击关注 文丨刘雨琦 “数据库的国产替代,必须经过严格的考虑,保证不会出错,所以大多数企业的领导层选择按兵不动或者简单扩容。因为不换就不会错,选了很久如果选错,还可能会出现重大事故。” 某银行数据库技术人员…

【Vue】day02-Vue基础入门

目录 day02 一、今日学习目标 1.指令补充 2.computed计算属性 3.watch侦听器 4.综合案例 (演示) 二、指令修饰符 1.什么是指令修饰符? 2.按键修饰符 3.v-model修饰符 4.事件修饰符 三、v-bind对样式控制的增强-操作class 1.语法…

AI时代图像安全“黑科技”如何助力人工智能与科技发展?

〇、前言 7月7日下午,2023世界人工智能大会(WAIC)“聚焦大模型时代AIGC新浪潮—可信AI”论坛在上海世博中心红厅举行。人工智能等技术前沿领域的著名专家与学者、投资人和领军创业者汇聚一堂,共同探索中国科技创新的驱动力量。 在…

【Git】Git 拉取的快速方法(含项目示例)

文章目录 一、问题的提出二、问题的尝试解决 一、问题的提出 在我们之前的拉取中,速度可能比较慢,例如,我们要拉取CLIP的项目。 (ldm) rootI1385efcc2300601b29:/hy-tmp/latent-diffusion# pip install githttps://github.com/openai/CLIP.…

JavaWeb课程设计项目实战(02)——搭建开发环境

版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog.csdn.net/lfdfhl 友情提示 1、 假若你的设备已有可用的Java开发基础环境,则无需重新搭建 2、 假若你需重新搭建Java开发,请务必彻底卸载之前的环境 3、 请尽量保证与…

吴恩达ML2022-用于手写数字识别的神经网络

1 用到的包 导入在这个分配过程中需要的所有包。 Numpy 是使用 Python 进行科学计算的基本软件包。Matplotlib 是在 Python 中绘制图形的流行库。tensorflow是一种流行的机器学习平台。 import numpy as np import tensorflow as tf from tensorflow.keras.models import Se…

文心一言 VS 讯飞星火 VS chatgpt (59)-- 算法导论6.4 3题

文心一言 VS 讯飞星火 VS chatgpt (59)-- 算法导论6.4 3题 三、对于一个按升序排列的包含 n 个元素的有序数组 A 来说,HEAPSORT 的时间复杂度是多少?如果 A 是降序呢? 文心一言: 对于一个按升序排列的包含 n 个元素的有序数组…

windows下mingw 编译boost-1.78.0

1.mingw环境设置 添加C:\cygwin64\bin 到环境变量,cmd运行检查是否安装成功 打开cmd,验证: 2.boost下载&编译 下载:Boost Downloads 如果基于msvc编译器编译,可直接下载安装库:Boost C Libraries -…

Hugging News #0717: 开源大模型榜单更新、音频 Transformers 课程完成发布!

每一周,我们的同事都会向社区的成员们发布一些关于 Hugging Face 相关的更新,包括我们的产品和平台更新、社区活动、学习资源和内容更新、开源库和模型更新等,我们将其称之为「Hugging News」。本期 Hugging News 有哪些有趣的消息&#xff0…

R语言的水文、水环境模型优化技术及快速率定方法与多模型案例实践

在水利、环境、生态、机械以及航天等领域中,数学模型已经成为一种常用的技术手段。同时,为了提高模型的性能,减小模型误用带来的风险;模型的优化技术也被广泛用于模型的使用过程。模型参数的快速优化技术不但涉及到优化本身而且涉…

TCP的三次握手过程

TCP 是面向连接的协议,所以使用 TCP 前必须先建立连接,而建立连接是通过三次握手来进行的。三次握手的过程如下图: 刚开始客户端处于 closed 的状态,服务端处于 listen 状态。 第一次握手:客户端给服务端发一个 SYN 报…

Flask

简介 django是个大而全的框架,flask是一个轻量级的框架django内部为我们提供了非常多的组件:orm/session/cookie/admin/form/modelform/路由/视图/模板/中间件/分页/auth/contenttype/缓存/信号/多数据库连接flask框架本身没有太多的功能,路由…

【MQTT】Esp32数据上传采集:最新mqtt插件(支持掉线、真机调试错误等问题)

前言 这是我在Dcloud发布的插件-最完整Mqtt示例代码(解决掉线、真机调试错误等问题),经过整改优化和替换Mqtt的js文件使一些市场上出现的问题得以解决,至于跨端出问题,可能原因有很多,例如,合法…

Python 字典 get()函数使用详解,字典获取值

「作者主页」:士别三日wyx 「作者简介」:CSDN top100、阿里云博客专家、华为云享专家、网络安全领域优质创作者 「推荐专栏」:小白零基础《Python入门到精通》 get函数使用详解 1、设置默认返回值2、嵌套字典取值3、get() 和 dict[key] 的区别…

长短期记忆网络(LSTM)原理解析

长短期记忆网络(Long Short-Term Memory,简称LSTM)是一种常用于处理序列数据的深度学习模型。它在循环神经网络(Recurrent Neural Network,RNN)的基础上进行了改进,旨在解决传统RNN中的梯度消失…

myAgv的slam算法学习以及动态避障下篇

引言 在之前的一篇文章中有提到购入了一台myAGV,以树莓派4B为控制核心的移动机器人。上篇文章中向大家介绍了myAGV如何实现建图、导航以及静态避障,但我们深知,这只是机器人自主导航能力的基础。在实际应用场景中,机器人需要面对复…
最新文章