前言
HDFS Ozone對象存儲最近會有一個大動作:merge到主代碼分支。這就動作具有十分大的意義,因為它意味着Ozone將在下一個最近發布的hadoop版本中出現並可以被廣大用戶所使用。所以在這個背景下,Ozone第一版本的代碼和結構基本已經確定完畢,這個時候,我們再從大的層面來學習、了解這個框架、體系顯然還是很有必要的。官方社區已經有許多相應的介紹文檔在介紹這方面的內容了。筆者也大致閱讀了一下,來簡單概述其中一些要點。
Ozone高層設計
首先要明白Ozone是用來干什么的:
基於Apache Hadoop之上用來做億萬數量級對象存儲的。
Ozone第一版本內部的架構圖如下所示:

下面,筆者依次從上到下介紹其中相關的組件。
Ozone Client
Ozone client客戶端在Ozone內部是一個對外部開放使用的模塊,比如說Ozone相關的shell命令會觸發到ozone client,這就是圖中顯示的Ozone Cli。
再來說說圖中左上角的Rest Handler。這是什么意思呢?Ozone client能夠支持2種方式的通信:RPC方式和Restful接口的方式。其中能做到一鍵切換。
Corona是Ozone內部的性能測試工具,它的原理是利用Ozone客戶端接口來做一些benchmark。它可以分為2種模式:online和offline模式。
offline模式:開若干線程創建指定數量級別的隨機命名的volume/bucket/key。以此達到在擁有大量key的效果。
online模式:連接一個公開的地址,通過網絡爬取的方式下載文件,put到Ozone上。
Ozone文件系統:OzoneFileSysyem
Ozone為了兼容其它框架體系,根據自身獨特的數據特點,實現了文件系統接口,稱為OzoneFileSystem。這樣的話,用戶可以以通用的方式來使用Ozone內部的文件對象。在程序上無需做兼容性的改動。
Key Space Manager
Key Space Manager(KSM)負責管理的是Ozone命名空間。所有的volume,bucket、key的記錄信息都保存在了KSM中。此角色類似於HDFS的NameNode。KSM與SCM交互通性,然后Ozone client寫學數據到最終的block上。最終通過Apache Ratis來實現多副本機制,以此保證HA。
Storage Container Manager
Storage Container Manager(SCM)負責管理“Container”對象,Container在邏輯上存儲的是block塊對象集合。DataNode是以Container的形式來提供存儲能力。
在SCM內部提供了以下抽象的概念:

下面是具體角色介紹:
- Block: block數據塊對象,真實存儲數據的對象,可以擁有多個副本塊。
- Container:Block塊集合。
- Pipeline:SCM允許2種Pipeline方式實現多副本:單副本的Standaline模式和多副本的Ratis方式。
- Pool:一組特定的數據節點稱為一個pool。將節點按pool分組是為了方便日常的維護升級操作,也是為了擴展性的考慮。
- Node:物理存儲數據的地方。
參考資料
1.Ozone: Documentation: Add Ozone overview documentation. https://issues.apache.org/jira/secure/attachment/12889871/HDFS-12551-HDFS-7240.004.patch