自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

下一代大數(shù)據(jù)存儲Ozone,終于有人講明白了

存儲
Ozone能夠輕松管理小文件和大文件,是一個分布式Key-Value對象存儲系統(tǒng)。

HDFS是業(yè)界默認(rèn)的大數(shù)據(jù)存儲系統(tǒng),在業(yè)界的大數(shù)據(jù)集群中有非常廣泛的使用。HDFS集群有著很高的穩(wěn)定性且易擴(kuò)展得益于它較簡單的構(gòu)架,但包含幾千個節(jié)點(diǎn),保存上百拍比特(PB)數(shù)據(jù)的集群也不鮮見。我們簡單來回顧一下HDFS的構(gòu)架,如圖1所示。

圖片

▲圖1 HDFS構(gòu)架

HDFS通過把文件系統(tǒng)元數(shù)據(jù)全部加載到數(shù)據(jù)節(jié)點(diǎn)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é)點(diǎn)規(guī)模,但單個HDFS集群仍然沒法很好地解決小文件的限制。

基于這些背景,Hadoop社區(qū)推出了新的分布式存儲系統(tǒng)Ozone。Ozone能夠輕松管理小文件和大文件,是一個分布式Key-Value對象存儲系統(tǒng)。

01基本概念

對象存儲是一種數(shù)據(jù)存儲,每個數(shù)據(jù)單元存儲為離散單元(稱為對象)。對象可以是任何類型、任何大小的數(shù)據(jù)。語義上,對象存儲中的所有對象都存儲在單個平面地址空間中,沒有文件系統(tǒng)的層次結(jié)構(gòu)。實現(xiàn)中,為了支持多用戶及用戶隔離,更好地管理和使用對象,通常對象存儲也會在平面的地址空間中劃分出幾個層次。這些層次是由對象存儲的實現(xiàn)確定的,每個層次都有特定的語義,用戶不能更改。

Ozone的對象層次分三個層次,從上到下依次是Volume(卷),Bucket(存儲桶)和Object(對象),如圖2所示。

圖片

▲圖2 Ozone的對象層次

1、Volume(卷)

Volume類似Amazon S3中用戶賬戶的概念,是用戶的Home目錄。Volume只有系統(tǒng)管理員才可以創(chuàng)建,是存儲管理的單位,比如配額管理。Ozone建議系統(tǒng)管理員為每個用戶都單獨(dú)創(chuàng)建獨(dú)立的Volume。Volume用來存儲Bucket,目前一個Volume下面可以包含任意多個Bucket。

2、Bucket(存儲桶)

存儲桶是對象的容器,概念類似于S3的Bucket,或者Azure中的Container。存儲桶創(chuàng)建于Volume下,只能屬于一個Volume,創(chuàng)建后歸屬關(guān)系不可更改,也不支持更改存儲桶的名字。Amazon S3的存儲桶名稱是全局唯一的,并且命名空間由所有AWS賬戶共享。這意味著,在創(chuàng)建存儲桶之后,任何AWS區(qū)域中的其他AWS賬戶均不能使用該存儲桶的名稱,直至刪除該存儲桶。在Ozone中,存儲桶名稱只需要確保在本Volume內(nèi)部是唯一的。不同的Volume可以創(chuàng)建名稱相同的存儲桶。

3、Object(對象)

對象存儲在存儲桶中,是鍵+值的存儲。鍵是對象的名稱,值是對象的內(nèi)容。對象的名稱在所屬存儲桶中必須是唯一的。對象有自己的元數(shù)據(jù),包括值的大小、創(chuàng)建時間、最后一次修改時間、備份數(shù)、訪問控制列表ACL等。對象的大小沒有限制。

Ozone支持URL以虛擬主機(jī)方式的訪問Ozone的對象。它采用如下格式:

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

?其中,scheme可以選:1)o3fs,通過RPC協(xié)議訪問Ozone。2)HTTP/HTTPS,通過HTTP協(xié)議訪問Ozone REST API。當(dāng)scheme省略時,默認(rèn)使用RPC協(xié)議。server:port是Ozone Manager的地址。如果沒有指定,則使用集群的配置文件ozone-site.xml中“ozone.om.address”值。如果配置文件中也沒有定義,則默認(rèn)使用“l(fā)ocalhost:9862”。

02技術(shù)架構(gòu)

?Ozone技術(shù)構(gòu)架分為三個部分:Ozone Manager,統(tǒng)一的元數(shù)據(jù)管理;Storage Container Manager,數(shù)據(jù)塊分配和數(shù)據(jù)節(jié)點(diǎn)管理;Datanode,數(shù)據(jù)節(jié)點(diǎn),數(shù)據(jù)的最終存放處,如圖3所示。類比HDFS的構(gòu)架,可以看到原來的Namenode的功能,現(xiàn)在由Ozone Manager和Storage Container Manage分別進(jìn)行管理。對象元數(shù)據(jù)空間和數(shù)據(jù)分布分開管理,有利于兩者的獨(dú)立按需擴(kuò)展,避免之前Namenode單節(jié)點(diǎn)的壓力。

圖片

▲圖3 Ozone技術(shù)構(gòu)架

Ozone主要模塊和功能如下。

1、Ozone Manager(OM)

Ozone Manager是管理Ozone的命名空間,提供所有的Volume(卷)、Bucket(存儲桶)和Key(鍵)的新建、更新和刪除操作。它存儲了Ozone的元數(shù)據(jù)信息,這些元數(shù)據(jù)信息包括Volumes、Buckets和Keys,底層通過RATIS(實現(xiàn)了RAFT協(xié)議)擴(kuò)展元數(shù)據(jù)的副本數(shù)來實現(xiàn)元數(shù)據(jù)的HA。Ozone Manager只和Ozone Client和Storage Container Manager通信,并不直接和Datanode通信。Ozone Manager將命名空間的元數(shù)據(jù)存儲在RocksDB中,避免了HDFS中需要將所有元數(shù)據(jù)都保留在內(nèi)存,從而經(jīng)常會受到小文件問題的困擾。RocksDB是Facebook基于LevelDB開發(fā)的一個本地Key-Value存儲引擎,尤其對于SSD有很多的優(yōu)化和改進(jìn),提供高吞吐量的讀寫操作。

2、Storage Container Manager(SCM)

SCM類似HDFS中的Block Manager,管理Container,寫Pipelines和Datanode,為Ozone Manager提供Block和Container的操作和信息。SCM也監(jiān)聽Datanode發(fā)來的心跳信息,作為Datanode Manager的角色,保證和維護(hù)集群所需的數(shù)據(jù)冗余級別。SCM和Ozone Client之間沒有通信。

3、Block、Container和Pipeline

Block是數(shù)據(jù)塊對象,真實存儲用戶的數(shù)據(jù)。Container中的一條記錄是一個Block的信息,每個Block在Container里面有且僅有一條記錄,如圖4所示,在Ozone中,數(shù)據(jù)是以Container為粒度進(jìn)行副本復(fù)制的。SCM中目前支持2種Pipeline方式,由單Datanode節(jié)點(diǎn)組成的Standalone讀Pipeline,和由三個Datanode節(jié)點(diǎn)組成的Apache RATIS寫Pipeline。Container有2種狀態(tài),OPEN和CLOSED。當(dāng)一個Container是OPEN狀態(tài)時,可以往里面寫入新的Block。當(dāng)一個Container達(dá)到它預(yù)定的大小時(默認(rèn)5GB),它從OPEN狀態(tài)轉(zhuǎn)換成CLOSED狀態(tài)。一個Closed Container是不可修改的。

圖片

▲圖4 Datanode Container內(nèi)部結(jié)構(gòu)

由三個Datanode節(jié)點(diǎn)組成的Apache RATIS寫Pipeline,保證數(shù)據(jù)一旦落盤,后續(xù)總能讀到最新的數(shù)據(jù),數(shù)據(jù)是強(qiáng)一致的,并且每份數(shù)據(jù)有3個備份,不用擔(dān)心由于單個磁盤故障導(dǎo)致的數(shù)據(jù)丟失,如圖5所示。

圖片

▲圖5 RATIS寫Pipeline

4、Datanode

Datanode是Ozone的數(shù)據(jù)節(jié)點(diǎn),以Container為基本存儲單元維護(hù)每個Container內(nèi)部的數(shù)據(jù)映射關(guān)系,并定時向SCM發(fā)送心跳節(jié)點(diǎn)、匯報節(jié)點(diǎn)的信息、管理Container的信息和Pipeline的信息。當(dāng)一個Container大小超過預(yù)定大小的90%時或者寫操作失敗時,Datanode會發(fā)送Container Close命令給SCM,把Container的狀態(tài)從OPEN轉(zhuǎn)變成CLOSED?;蛘弋?dāng)Pipeline出錯時,發(fā)送Pipeline Close命令給SCM,把Pipeline從OPEN狀態(tài)轉(zhuǎn)為CLOSED狀態(tài)。

5、分層管理

Ozone分層結(jié)構(gòu)使得Ozone Manager、Storage Container Manager和Datanode可按需獨(dú)立擴(kuò)展。對于Ozone提供的語義,也是分層管理的,如圖6所示。

圖片

▲圖6 Ozone語義與對應(yīng)的管理模塊

?6、對象創(chuàng)建

當(dāng)Ozone Client(客戶端)需要創(chuàng)建并且寫入一個新對象時,客戶端需要和Ozone Manager和Datanode直接打交道,具體過程如圖7所示。

圖片

▲圖7 創(chuàng)建Ozone新對象

1)Ozone客戶端鏈接Ozone Manager,提供需要創(chuàng)建的對象信息,包括對象的名稱、數(shù)據(jù)的大小、備份數(shù)和其他用戶自定義的對象屬性。

2)Ozone Manager收到Ozone客戶端的請求后,和SCM通信,請求SCM尋找能夠容納數(shù)據(jù)的處于OPEN狀態(tài)的Container,然后在找到的Container中分配足夠數(shù)量的Block。

3)SCM將新對象數(shù)據(jù)將要寫入的Container、Block和Container所在的Pipeline的三個Datanode的信息列表返回給Ozone Manager。

4)Ozone Manager將收到SCM返回的信息,返回給客戶端。

5)客戶端得到Datanode列表信息之后,和第一個Datanode(Raft Pipeline Leader)建立通信,將數(shù)據(jù)寫入Datanode的Container。

6)客戶端完成數(shù)據(jù)寫入后,連接Ozone Manager,確認(rèn)數(shù)據(jù)已經(jīng)更新完成,Ozone Manager更新對象的元數(shù)據(jù),記錄對象數(shù)據(jù)所在的Container和Block的信息。至此,新的對象創(chuàng)建完成。之后,其他的客戶端就可以訪問這個對象了。

7、對象讀取對象讀取的過程相對簡單,類似于HDFS的文件讀,如圖8所示。

圖片

▲圖8 讀取Ozone對象

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

2)Ozone Manager在元數(shù)據(jù)庫中查找對應(yīng)的對象,返回對象數(shù)據(jù)所在的Container和Block信息,包括Container所在的Datanode列表信息給Ozone Client(客戶端)。

3)Ozone支持Data locality。如果Ozone Client(客戶端)運(yùn)行在集群中的某個節(jié)點(diǎn)上,Ozone Manager會返回按照網(wǎng)絡(luò)拓?fù)渚嚯x排序的Datanode列表。Ozone Client(客戶端)可以選擇第一個Datanode節(jié)點(diǎn)(本地節(jié)點(diǎn)),也是離Client(客戶端)最近的節(jié)點(diǎn)來讀取數(shù)據(jù),節(jié)省數(shù)據(jù)讀取的網(wǎng)絡(luò)傳輸時間。

責(zé)任編輯:張燕妮 來源: 數(shù)倉寶貝庫
相關(guān)推薦

2020-11-30 08:34:44

大數(shù)據(jù)數(shù)據(jù)分析技術(shù)

2022-10-14 18:22:18

KafkaHiveZooKeeper

2021-12-03 18:25:56

數(shù)據(jù)指標(biāo)本質(zhì)

2022-04-27 18:25:02

數(shù)據(jù)采集維度

2021-09-03 18:38:13

數(shù)據(jù)湖數(shù)據(jù)倉庫

2021-06-29 11:21:41

數(shù)據(jù)安全網(wǎng)絡(luò)安全黑客

2022-01-05 18:27:44

數(shù)據(jù)挖掘工具

2022-04-22 11:26:55

數(shù)據(jù)管理架構(gòu)

2022-04-12 18:29:41

元數(shù)據(jù)系統(tǒng)架構(gòu)

2022-06-26 18:52:02

Hadoop大數(shù)據(jù)系統(tǒng)

2022-06-21 11:14:51

大數(shù)據(jù)系統(tǒng)架構(gòu)

2020-08-17 08:17:00

大數(shù)據(jù)人工智能技術(shù)

2022-03-15 17:12:03

大數(shù)據(jù)機(jī)器學(xué)習(xí)人工智能

2021-10-07 20:24:16

AIBI大數(shù)據(jù)

2021-10-09 00:02:04

DevOps敏捷開發(fā)

2021-06-13 12:03:46

SaaS軟件即服務(wù)

2022-03-27 20:32:28

Knative容器事件模型

2022-05-01 22:09:27

數(shù)據(jù)模型大數(shù)據(jù)

2021-12-07 18:24:26

數(shù)據(jù)安全

2022-11-01 18:21:14

數(shù)據(jù)埋點(diǎn)SDK
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號