hadoop api 复制文件_Hadoop发布新组件:分布式对象存储系统Ozone
大數據?/?人工智能?/?區塊鏈?/?數據庫?/?分布式存儲
2020年9月,Ozone 1.0.0分布式對象存儲系統在Apache Hadoop社區正式發布。據了解,經過2年多的社區持續開發和內部1000+節點的實際落地驗證,Ozone 1.0.0已經具備了在大規模生產環境下實際部署的能力。
我們知道,HDFS是Hadoop的分布式文件系統,但Ozone是什么?跟HDFS是什么關系?為什么要實現Ozone?
張東濤?| 文
???中興數據智能(ZTE-DI)出品
Ozone是一個在Hadoop內部做的、類似亞馬遜S3的分布式Key-Value對象存儲系統,其內部定義的API也兼容S3。
對象存儲的特點:
- 本質上是鍵值對存儲系統;
- 采用扁平化的管理方式(根據鍵,找到值);
- 值可以是任何東西,可以是小文件(小二進制片段),也可以是大文件;
- 對象存儲一般不支持追加寫和更新,面向的是一次寫入、多次讀取的需求場景。
Ozone的出現,不僅彌補了Hadoop生態圈沒有自己的分布式對象存儲的遺憾,而且作為對象存儲系統,能夠支持存儲數十億個不同大小的對象,在一定程度也能彌補HDFS在文件數量上不足的存儲弱點。
目前版本的Ozone提供了一套兼容HDFS API的Hadoop Common FileSystem(HCFS)API,可以讓Spark、Hive 和YARN 等應用無需任何修改就使用 Ozone。
將來的發展方向是Ozone和HDFS合二為一,在同一套分布式存儲系統上既能支持文件存儲,又能支持對象存儲。Hadoop社區已有issue正在實現,并命名為HDDS(Hadoop Distributed Data Store)。
下面介紹一下Ozone組件的基本語義、框架和流程。
語義
Ozone是一個分布式對象存儲系統,其中存儲的每個Key-Value鍵值對就是一個Object對象。
Ozone提供給用戶的語義包含Volume,Bucket 和Key:
- Volume的概念和用戶賬號類似,只有管理員可以創建和刪除Volume;
- Bucket的概念和目錄類似,用戶可以在自己的Volume下創建任意數量的Bucket,每個Bucket可以包含任意數量的Key,但是不可以包含其它的Bucket;
- Key的概念和文件類似,用戶的數據以 Key-Value 的形式存儲在Bucket 下。每個 Key 在 Bucket 中必須唯一,可以是任意字符串。
構架
Ozone 從結構上分為三個部分:
- Ozone Manager:元數據管理;
- Storage Container Manager:存儲容器管理;
- Datanode:數據最終的存放處。
▲ Ozone構架
▲ 圖片引自:https://mp.weixin.qq.com/s/b7Dwa-O895tWc_u7wCQfKw
類比 HDFS 的構架, 可以看到原來 Namenode 的功能,現在由 Ozone Manager 和 Storage Container Manage 分別進行管理了。接下來,我們仔細看一下 Ozone 主要模塊和概念。
Ozone Manager管理 Ozone 的 Namespace,提供所有的 Volume、Bucket 和 Key 的新建,更新和刪除操作。存儲了 Ozone 的元數據信息,這些元數據信息包括Volumes、Buckets 和 Keys,底層通過 Ratis(實現了Raft協議)擴展元數據的副本數來實現元數據的HA。Ozone Manager 只和 Ozone Client 和 Storage Container Manager 通信,并不直接和 Datanode 通信。
Storage Container Manager(SCM)
管理 Container、Pipelines和Datanode之間的關系,為 Ozone Manager 提供 Object 和 Container 的操作和信息。SCM也監聽 Datanode 發來的心跳信息,作為Datanode Manager的角色, 保證和維護集群所需的數據冗余級別。SCM 和 Ozone Client 之間沒有通信。
Datanode
Datanode 是 Ozone 的數據節點,以 Container 為基本存儲單元,維護每個 Container 內部的數據映射關系。Datanode 是 Ozone 中的 worker,所有的數據都存儲在數據節點上,用戶以對象的方式寫數據,數據節點將多個對象聚合成一個Container ,Container中包含用戶寫入的對象和這些對象的元數據以及存儲實際數據的磁盤文件。
Datanode 定時向 SCM 發送心跳節點,匯報節點的信息、管理的 Container 及Pipeline 的信息。當一個 Container Size 超過預定的大小 90% 時 或者寫操作失敗時,Datanode 會發送 Container Close 命令給 SCM,把 Container 的狀態從 Open 轉變成 Closed。
Object,Container 和 Pipeline之間關系
Object是數據對象,真實存儲用戶的數據。Container是一個邏輯概念,是由一些相互之間沒有關系的 Object組成的集合。在 Ozone 中, 數據是以 Container 的粒度進行副本復制的。Pipeline 來保證 Container 實現想要的副本數。SCM 中目前支持2種 Pipeline 方式實現多副本,單副本的 Standalone 模式和三副本的 Ratis 方式。
Container 有2種狀態,OPEN 和 CLOSED。當一個Container 是 OPEN 狀態時,可以往里邊寫入新的 Object。當一個Container 達到它預定的大小時(默認5GB),它從 OPEN 狀態轉換成 CLOSED 狀態。一個 Closed Container 是不可修改的。
▲ Container 內部結構
▲ 圖片引自:https://ci-hadoop.apache.org/view/Hadoop%20Ozone/job/ozone-doc-master/lastSuccessfulBuild/artifact/hadoop-hdds/docs/public/zh/concept/datanodes.html
Pipeline 來保證 Container 實現想要的副本數。Namenode將不再管理HDFS的副本一致性,由Ratis接管,也就是如果缺少了副本,不會上報Namenode,Ratis自己發現及補齊。
說明:Ratis 寫 Pipeline:為了將Raft一致性算法更方便地使用于各個分布式系統中,以此構建出容錯性更強的分布式服務。Apache Ratis誕生了,它是一個Raft算法的Java實現庫。目前在Ozone被用來做Container command的replicate的執行。在未來還將用于Ozone HA的實現。
▲ Pipeline
▲ 圖片引自:https://blog.csdn.net/Androidlushangderen/article/details/74860017
Ozone語義和模塊對應關系
Ozone 分層的構架結構,使得Ozone Manager、Storage Container Manager 和 Datanode 按需獨立擴展。對于Ozone 提供的語義,也是由各層分層管理的。
▲ Ozone語義和模塊對應關系
▲ 圖片引自:https://mp.weixin.qq.com/s/b7Dwa-O895tWc_u7wCQfKw
?
讀寫過程
寫過程
Ozone 客戶端先和 Ozone Manager 通信,提供需要創建的Key 的信息,包括 /volume/bucket/key,數據的大小,備份數,和其他用戶自定義Key的屬性;
Ozone Manager 收到 Ozone 客戶端的請求后,調用SCM 的服務;
SCM尋找足夠容納數據的Open Container,將Container 對應的Pipeline 的Datanode 列表信息返回給Ozone Manager;
Ozone Manager 返回對應的信息給客戶端;
客戶端拿到Datanode列表信息之后,和第一個Datanode(Raft Leader)建立通信,將數據寫入Datanode 的Container 中,更新Container 的元數據,記錄新增加的這個數據塊。
最后,客戶端再和Ozone Manager 通信,告知數據已經成功的在 Datanode寫入了。Ozone 修改 Namspace 元數據,記錄一個新生成的Key。之后,其他的客戶端就可以訪問這個Key了。
▲ 創建一個新 Key
▲ 圖片引自:https://mp.weixin.qq.com/s/b7Dwa-O895tWc_u7wCQfKw
讀過程
Ozone 客戶端 先和 Ozone Manager 通信,告知需要讀取的Key 的信息(/volume/bucket/key)。
Ozone Manager 在元數據庫中查找對應的Key,返回 Key 數據所在的 Datanode 列表給Ozone 客戶端。Ozone 支持Data locality。如果Ozone 客戶端運行在集群中的某個節點上,Ozone Manager 會返回按照網絡拓撲距離排序的Datanode列表。
當 Ozone 客戶端拿到 Key 的信息之后,可以選擇第一個Datanode 節點(一本地節點),也是離客戶端最近的節點來讀取數據,節省數據讀取的時間。
▲ 讀取一個Key
▲ 圖片引自:https://mp.weixin.qq.com/s/b7Dwa-O895tWc_u7wCQfKw
Ozone與HDFS架構的重要區別
Ozone在存儲層上,加了一個Container層,因此Datanode向上層的Block報告被Container報告替代。因為Container數量比Block少很多,所以對相關進程內存消耗及啟動時間減少很多。以一條KV對應一個文件來評估,Ozone Manager類似Namenode,會集中存放大量KV->Container->Datanode元數據;但由于Container層帶來的優點,使得Ozone Manager比Namenode內存消耗量減少很多。
SCM存放所有Datanode中的Container信息及空間信息元數據,由于Container大約5G,所以SCM的元數據并不大。
Datanode要負責把KV對象寫入Datanode中的Container,增加了更新Container的元數據的步驟,用于記錄新增加的這個數據塊;KV查詢也多了一次在Container內部的元數據查詢交互,這些操作都會對性能產生影響。
結束語Ozone當前版本就介紹到這里,如果有對下一代Hadoop分布式存儲HDDS(等同于HDFS+Ozone)感興趣的同學,可以跟蹤開源社區這個issue:
https://issues.apache.org/jira/browse/HDFS-10419* 本文為中興數據智能原創文章,轉載請留言或評論獲取授權。
總結
以上是生活随笔為你收集整理的hadoop api 复制文件_Hadoop发布新组件:分布式对象存储系统Ozone的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: it专员职责_网络IT专员岗位职责
- 下一篇: git stash 强制恢复_开发中必须