@
-
概述
- 定義
- 特性
-
架構(gòu)
- 總體架構(gòu)
- 寫數(shù)據(jù)
- 讀數(shù)據(jù)
-
部署
- 安裝方式
-
安裝
- Docker啟動
- Docker-compose啟動
- 企業(yè)預(yù)置型(On Premise)安裝
-
實踐
- 命令行接口
- Ofs (Hadoop兼容)
- Recon API
概述
定義
Apache Ozone 官網(wǎng)地址 https://ozone.apache.org/ 最新版本1.3.0
Apache Ozone 官網(wǎng)最新文檔地址 https://ozone.apache.org/docs/1.3.0/
Apache Ozone 源碼地址 https://github.com/apache/ozone
Apache Ozone是一個高度可擴(kuò)展、冗余的分布式對象存儲,適用于分析、大數(shù)據(jù)和云原生應(yīng)用,以在Kubernetes等容器化環(huán)境中有效地工作。Ozone支持S3兼容的對象API以及Hadoop兼容的文件系統(tǒng)實現(xiàn)。它針對高效的對象存儲和文件系統(tǒng)操作進(jìn)行了優(yōu)化。建立高可用性、可復(fù)制的塊存儲層的Hadoop分布式數(shù)據(jù)存儲(Hadoop Distributed Data Store, hds),像Apache Spark, Hive和YARN這樣的應(yīng)用程序在使用Ozone時無需任何修改即可工作;Ozone附帶了一個Java客戶端庫、S3協(xié)議支持和一個命令行接口。
Apache Ozone 可與Cloudera 數(shù)據(jù)平臺(CDP) 一起使用,可以擴(kuò)展到數(shù)十億個不同大小的對象。它被設(shè)計為原生的對象存儲,可提供極高的規(guī)模、性能和可靠性,以使用 S3 API 或傳統(tǒng)的 Hadoop API 處理多個分析工作負(fù)載。Ozone其發(fā)展是準(zhǔn)備替代HDFS的下一代的大數(shù)據(jù)存儲系統(tǒng),著力要解決的目前HDFS存在的問題如NameNode的擴(kuò)展性和小文件的性能問題。
先回顧一下HDFS,HDFS通過把文件系統(tǒng)元數(shù)據(jù)全部加載到數(shù)據(jù)節(jié)點Namenode內(nèi)存中,給客戶端提供了低延遲的元數(shù)據(jù)訪問。由于元數(shù)據(jù)需要全部加載到內(nèi)存,所以一個HDFS集群能支持的最大文件數(shù),受Java堆內(nèi)存的限制,上限大概是4億~5億個文件。所以HDFS適合大量大文件[幾百兆字節(jié)(MB)以上]的集群,如果集群中有非常多的小文件,HDFS的元數(shù)據(jù)訪問性能會受到影響。雖然可以通過各種Federation技術(shù)來擴(kuò)展集群的節(jié)點規(guī)模,但單個HDFS集群仍然沒法很好地解決小文件的限制。
Ozone是新一代的對象存儲系統(tǒng),其架構(gòu)設(shè)計簡單的可以總結(jié)為:
- 基于Raft+RocksDB來實現(xiàn)了一個分布式的kv存儲,使用該kv存儲來實現(xiàn)獨(dú)立的元數(shù)據(jù)的存儲,使得元數(shù)據(jù)完成了高可用和scale out的高擴(kuò)展性。
- 基于Raft實現(xiàn)了數(shù)據(jù)存儲功能。數(shù)據(jù)實現(xiàn)高可用和擴(kuò)展性。
- 數(shù)據(jù)塊的元數(shù)據(jù)分了兩層:SCM管理block,block在Container的布局的信息保存在DataNode本地的rocksdb中,這種設(shè)計對小文件比較好。
Ozone目前社區(qū)開發(fā)比較活躍;架構(gòu)比較合理,在擴(kuò)展性和小文件方面優(yōu)異;其設(shè)計目標(biāo)和應(yīng)用場景也比較明確清晰:彌補(bǔ)HDFS的缺陷,替換HDFS在大數(shù)據(jù)領(lǐng)域的地位。
特性
- 可伸縮的:Ozone旨在支撐數(shù)百億甚至更多的文件和塊。
- 一致的:Ozone是一種強(qiáng)一致性的分布式存儲,其一致性通過使用像RAFT這樣的協(xié)議來實現(xiàn)。
- 云原生:Ozone可以在YARN和Kubernetes這樣的容器化環(huán)境良好運(yùn)行。
- 安全:Ozone與kerberos基礎(chǔ)設(shè)施集成以實現(xiàn)訪問控制,并支持TDE和在線加密。
- 多協(xié)議支持:Ozone支持不同的協(xié)議,如S3和Hadoop文件系統(tǒng)API。
- 高可用性:Ozone是一種完全復(fù)制的系統(tǒng),可以在多次故障完美恢復(fù)。
架構(gòu)
總體架構(gòu)
Ozone主要設(shè)計要點是可擴(kuò)展性,它的目標(biāo)是擴(kuò)展到數(shù)十億個對象;Ozone將命名空間管理和塊空間管理分開;命名空間由名為Ozone Manager (OM)的守護(hù)進(jìn)程管理,塊空間由Storage Container Manager (SCM)管理。Ozone命名空間由多個存儲體組成。存儲卷也被用作存儲會計的基礎(chǔ);Ozone由volumes、buckets、keys組成:
- volumes:類似于用戶帳戶;只有管理員可以創(chuàng)建或刪除卷。
- buckets:桶類似于目錄。一個桶可以包含任意數(shù)量的鍵,但桶不能包含其他桶。
- keys:類似于文件,Ozone將數(shù)據(jù)以鍵的形式存儲在這些桶中。
Ozone的核心組件:
-
客戶端:S3 Gateway 提供 s3 協(xié)議的客戶端,Ozone FileSystem為兼容HDFS的文件系統(tǒng)客戶端。
-
元數(shù)據(jù)服務(wù)器
-
- Ozone Manager(OM):用于管理系統(tǒng)的元數(shù)據(jù),文件系統(tǒng)的對應(yīng)的主要是inode和dentry的管理,對象系統(tǒng)元數(shù)據(jù)主要是user,bucket,object等。Ozone Manager通過Raft + RocksDB實現(xiàn)了元數(shù)據(jù)存儲分布式的KV存儲。Raft協(xié)議使用開源的Apache Batis來實現(xiàn)。底層的KV存儲使用了基于LSM Tree的RocksDB來實現(xiàn)。由于RocksDB存儲是對寫比較友好的存儲系統(tǒng),讀操作不太友好。因此OM在內(nèi)存中做了相應(yīng)的元數(shù)據(jù)緩存系統(tǒng)用于緩存經(jīng)常訪問的元數(shù)據(jù),可以顯著降低讀操作的不友好的影響。
- Storage Container Manager(SCM):集群和數(shù)據(jù)塊管理,用于管理Data Node和數(shù)據(jù)Block相關(guān)的管理。
-
數(shù)據(jù)服務(wù)器:Datanodes用于存儲數(shù)據(jù),Containers就是block的集合,用于存儲數(shù)據(jù),其分布在Data Node上。所有數(shù)據(jù)都存儲在數(shù)據(jù)節(jié)點上??蛻舳艘詨K的形式寫數(shù)據(jù)。Datanode將這些塊聚合到一個存儲容器中。存儲容器是客戶端寫的關(guān)于塊的數(shù)據(jù)流和元數(shù)據(jù)。
-
Containers是Ozone/ hdd的基本復(fù)制單元,它們由存儲容器管理器(SCM)服務(wù)管理。容器是大的二進(jìn)制存儲單元(默認(rèn)為5Gb),可以包含多個塊,Container是數(shù)據(jù)復(fù)制(data replication)的基本單位。
- 一個DataNode上會有多個Container
- 一個Container有全局唯一的Container ID(Cid)
- 一個Container的對應(yīng)的三個副本分布在三個Data Node上,通過RAFT協(xié)議實現(xiàn)數(shù)據(jù)的復(fù)制和一致性。
- 創(chuàng)建容器時,它以O(shè)PEN狀態(tài)啟動。當(dāng)容器已滿(寫入約5GB數(shù)據(jù))時,容器將關(guān)閉并成為closed容器。OPEN和CLOSED容器的基本區(qū)別
Open Close mutable (不能刪除,可追加寫) Immutable (可以刪除,不能追加寫) replicated with RAFT(Ratis) (寫操作是通過 raft協(xié)議復(fù)制完成) replicated with async container copy (刪除操作和數(shù)據(jù)修復(fù)操作不需要raft協(xié)議) Raft leader is used to READ/WRITE (寫操作需要通過Leader,只能通過Leader讀寫) All the nodes can be used to READ (所以節(jié)點都可以讀) - BlockID分兩部分:ContainerID和LocalID,ContainerID用于標(biāo)記該block所屬的Container,LocalID用于查找該Block在Container的Offset等位置信息
- Block:數(shù)據(jù)存儲塊默認(rèn)最大256MB,一個Container包含多個Block。一個Block是一個可變的數(shù)據(jù)塊,由基本的chunk組成。
- Chunk:數(shù)據(jù)存儲塊,默認(rèn)最大4MB,一個Block包含多個Chunk,Chunk是客戶端數(shù)據(jù)讀寫的基本單位。
- Ratis PipeLine:數(shù)據(jù)復(fù)制的數(shù)據(jù)流,可以理解為一個獨(dú)立的Raft Group用于數(shù)據(jù)復(fù)制。Pipeline和Container是一對多的關(guān)系。一個Raft Group可以實現(xiàn)多個Container的數(shù)據(jù)復(fù)制。
-
-
Recon Server:系統(tǒng)監(jiān)控和管理
Ozone管理器是名稱空間管理器,存儲容器管理器管理物理層和數(shù)據(jù)層,Recon是Ozone的管理接口。從另一個的視角來看Ozone,將其想象為構(gòu)建在hdd(一個分布式塊存儲)之上的名稱空間服務(wù)的Ozone Manager??梢暬粞醯姆椒ㄊ怯^察功能層;這里有元數(shù)據(jù)管理層,由Ozone管理器和存儲容器管理器組成。數(shù)據(jù)存儲層基本上是數(shù)據(jù)節(jié)點,由SCM管理。由Ratis提供的復(fù)制層用于復(fù)制元數(shù)據(jù)(OM和SCM),也用于在數(shù)據(jù)節(jié)點上修改數(shù)據(jù)時保持一致性。Recon管理服務(wù)器與Ozone的所有其他組件進(jìn)行通信,并為Ozone提供統(tǒng)一的管理API和用戶體驗。協(xié)議總線允許通過其他協(xié)議擴(kuò)展Ozone。目前只有通過協(xié)議總線構(gòu)建的S3協(xié)議支持。協(xié)議總線提供了一個通用概念,可以實現(xiàn)調(diào)用O3 Native協(xié)議的新文件系統(tǒng)或?qū)ο蟠鎯f(xié)議。Apache Ratis是開源的java版的raft協(xié)議的實現(xiàn)。對于數(shù)據(jù)和元數(shù)據(jù)都用了Raft協(xié)議來保障數(shù)據(jù)的一致性和高可用。
- 協(xié)議層:提供s3 protocol,NFS protocol等協(xié)議
- 元數(shù)據(jù)層:MetaData layer:包括 Ozone Manager處理文件系統(tǒng)或者對象存儲系統(tǒng)的元數(shù)據(jù)。Storage Container Manager處理集群和數(shù)據(jù)塊相關(guān)的元數(shù)據(jù)。Ozone把HDFS的元數(shù)據(jù)拆分為OM文件系統(tǒng)的目錄管理和SCM數(shù)據(jù)塊管理。
- 數(shù)據(jù)層:Data Layer層,主要是DataNode 組成的集群,每個DataNode上包括很多Container,Container組成Raft Group來實現(xiàn)數(shù)據(jù)的復(fù)制。
寫數(shù)據(jù)
寫入數(shù)據(jù)時,向Ozone管理器請求一個塊,Ozone管理器會返回一個塊并記住該信息
讀數(shù)據(jù)
當(dāng)讀取該文件時,由Ozone Manager返回需要塊的地址。
部署
安裝方式
- 簡單啟動:從Docker Hub運(yùn)行Ozone
- 推薦:從官方發(fā)布運(yùn)行Ozone。Apache Ozone也可以從官方發(fā)布包中運(yùn)行。隨著官方源代碼的發(fā)布,還發(fā)布了一組方便的二進(jìn)制包;可以很輕松的在不同的配置中運(yùn)行這些二進(jìn)制文件。
- 物理部署Ozone集群。
- K8S部署Ozone集群。
- MiniKube部署Ozone集群。
- docker-compose部署本地集群
- Hadoop Ninja:從源碼中構(gòu)建Ozone部署包。
安裝
Docker啟動
# 如果是用于開發(fā)測試,可以通過容器啟動Ozone;啟動一體化Ozone容器最簡單的方法是從docker hub中使用最新的docker鏡像,該容器將運(yùn)行所需的元數(shù)據(jù)服務(wù)器(Ozone Manager、Storage container Manager)、一個數(shù)據(jù)節(jié)點和S3兼容的REST服務(wù)器(S3 Gateway)。
docker run -p 9878:9878 -p 9876:9876 apache/ozone
Docker-compose啟動
# 本地多容器集群,如果要部署偽集群,每個組件在自己的容器中運(yùn)行,則可以使用docker-compose啟動,從docker hub中的映像中提取這些文件
docker run apache/ozone cat docker-compose.yaml > docker-compose.yaml
docker run apache/ozone cat docker-config > docker-config
# docker-compose啟動集群
docker-compose up -d
# 如果需要多個數(shù)據(jù)節(jié)點,可以按比例擴(kuò)展:
docker-compose up -d --scale datanode=3
訪問Ozone Recon的控制臺頁面http://hadoop3:9888 ,查看概覽可以看下Datanodes、Pipelines、Volumes、Buckets、Keys等,還可以查看數(shù)據(jù)節(jié)點信息
企業(yè)預(yù)置型(On Premise)安裝
可以在一個真正的集群中設(shè)置臭氧,建立一個真正的集群,其組成部分
- Ozone Manager:是負(fù)責(zé)Ozone 命名空間的服務(wù)器。臭氧管理器負(fù)責(zé)所有的卷,桶和鍵操作。
- Storage Container Manager:充當(dāng)塊管理器。Ozone Manager從SCM請求塊,客戶機(jī)可以向其寫入數(shù)據(jù)。
- datanode:Ozone數(shù)據(jù)節(jié)點代碼運(yùn)行在HDFS datanode內(nèi)部,或者在獨(dú)立部署的情況下運(yùn)行臭氧datanode守護(hù)進(jìn)程。
# 下載ozone最新版本的1.3.0
wget https://dlcdn.apache.org/ozone/1.3.0/ozone-1.3.0.tar.gz
# 解壓文件
tar -xvf ozone-1.3.0.tar.gz
# 進(jìn)入目錄
cd ozone-1.3.0
# 配置文件位于ozone根目錄下的etc/hadoop/ozone-site.xml
<property>
<name>ozone.metadata.dirs</name>
<value>/data/disk1/meta</value>
</property>
ozone.scm.names
<property>
<name>ozone.scm.names</name>
<value>scm.hadoop.apache.org</value>
</property>
ozone.scm.datanode.id.dir
<property>
<name>ozone.scm.datanode.id.dir</name>
<value>/data/disk1/meta/node</value>
</property>
ozone.om.address
<property>
<name>ozone.om.address</name>
<value>ozonemanager.hadoop.apache.org</value>
</property>
# scm初始化
ozone scm --init
# scm啟動
ozone --daemon start scm
# om初始化
ozone om --init
# om啟動
ozone --daemon start om
# 數(shù)據(jù)節(jié)點啟動
ozone --daemon start datanode
# 簡潔啟動
ozone scm --init
ozone om --init
start-ozone.sh
實踐
命令行接口
Ozone shell是從命令行與Ozone交互的主要接口,其背后使用Java API。如果不使用ozone sh命令,就無法訪問一些功能。例如:
- 創(chuàng)建有配額的卷
- 管理內(nèi)部acl
- 使用加密密鑰創(chuàng)建桶
所有這些都是一次性的管理任務(wù)。應(yīng)用程序可以使用其他接口,如Hadoop兼容文件系統(tǒng)(o3fs或ofs)或S3接口來使用臭氧,而不需要這個CLI。
# 查看卷的幫助ozone sh volume --help# 查看具體操作幫助ozone sh volume create --help# 創(chuàng)建卷ozone sh volume create /vol1# 查看卷信息ozone sh volume info /vol1# 列出卷ozone sh volume list /
# 創(chuàng)建桶ozone sh bucket create /vol1/bucket1# 查看桶ozone sh bucket info /vol1/bucket1# 存儲鍵數(shù)據(jù)ozone sh key put /vol1/bucket1/anaconda-post.log /anaconda-post.log# 查看鍵數(shù)據(jù)ozone sh key info /vol1/bucket1/anaconda-post.log# 讀取鍵數(shù)據(jù)到本地ozone sh key get /vol1/bucket1/anaconda-post.log /data/
# 指定URLozone sh bucket info o3://172.28.0.8:9862/vol1/bucket1
Ofs (Hadoop兼容)
Hadoop兼容的文件系統(tǒng)接口允許像Ozone這樣的存儲后端輕松集成到Hadoop生態(tài)系統(tǒng)中。Ozone文件系統(tǒng)是一個與Hadoop兼容的文件系統(tǒng)。
目前,Ozone支持o3fs://和ofs://兩種方案。o3fs和ofs之間最大的區(qū)別在于,o3fs只支持單個桶上的操作,而ofs支持跨所有卷和桶的操作,并提供所有卷/桶的完整視圖。
卷和掛載位于OFS文件系統(tǒng)的根級別。桶自然列在卷下。鍵和目錄位于每個桶的下面。注意,對于掛載,目前只支持臨時掛載/tmp。
請將下面內(nèi)容添加到core-site.xml中。
<property> <name>fs.ofs.impl</name> <value>org.apache.hadoop.fs.ozone.RootedOzoneFileSystem</value></property><property> <name>fs.defaultFS</name> <value>ofs://hadoop3/</value></property>
將ozone- filessystem -hadoop3.jar文件添加到類路徑中(注意如果使用Hadoop 2.X,使用ozone- filessystem -hadoop2-*.jar)
export HADOOP_CLASSPATH=/opt/ozone/share/ozone/lib/ozone-filesystem-hadoop3-*.jar:$HADOOP_CLASSPATH
設(shè)置了默認(rèn)的文件系統(tǒng),用戶就可以運(yùn)行l(wèi)s、put、mkdir等命令。
# 創(chuàng)建卷,也即是創(chuàng)建目錄hdfs dfs -mkdir /volume1# 創(chuàng)建桶,也即是創(chuàng)建二級目錄hdfs dfs -mkdir /volume1/bucket1# 寫入數(shù)據(jù)文件hdfs dfs -put /tmp/data.txt /volume1/bucket1/# 查看文件hdfs dfs -ls /volume1/bucket1/
通過Ozone的shell也能查看對應(yīng)的信息
# o3fshdfs dfs -ls o3fs://bucket.volume.cluster1/prefix/# ofshdfs dfs -ls ofs://cluster1/volume/bucket/prefix/
Recon API
Recon API v1是一組HTTP端點,可幫助了解Ozone集群的當(dāng)前狀態(tài),并在需要時進(jìn)行故障排除。
標(biāo)記為admin的端點只能由Ozone中指定的Kerberos用戶訪問。安全集群的Administrators或ozone.recon.administrators配置。
Property | Value |
---|---|
ozone.security.enabled | true |
ozone.security.http.kerberos.enabled | true |
ozone.acl.enabled | true |
# 獲取容器curl http://hadoop3:9888/api/v1/containers
這個相當(dāng)于管理頁面的后臺接口文章來源:http://www.zghlxwxcb.cn/news/detail-425205.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-425205.html
- 本人博客網(wǎng)站IT小神 www.itxiaoshen.com
到了這里,關(guān)于下一代大數(shù)據(jù)分布式存儲技術(shù)Apache Ozone初步研究的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!