@
Apache Ozone 官網地址 https://ozone.apache.org/ 最新版本1.3.0
Apache Ozone 官網最新檔案地址 https://ozone.apache.org/docs/1.3.0/
Apache Ozone 原始碼地址 https://github.com/apache/ozone
Apache Ozone是一個高度可延伸、冗餘的分散式物件儲存,適用於分析、巨量資料和雲原生應用,以在Kubernetes等容器化環境中有效地工作。Ozone支援S3相容的物件API以及Hadoop相容的檔案系統實現。它針對高效的物件儲存和檔案系統操作進行了優化。建立高可用性、可複製的塊儲存層的Hadoop分散式資料儲存(Hadoop Distributed Data Store, hds),像Apache Spark, Hive和YARN這樣的應用程式在使用Ozone時無需任何修改即可工作;Ozone附帶了一個Java使用者端庫、S3協定支援和一個命令列介面。
Apache Ozone 可與Cloudera 資料平臺(CDP) 一起使用,可以擴充套件到數十億個不同大小的物件。它被設計為原生的物件儲存,可提供極高的規模、效能和可靠性,以使用 S3 API 或傳統的 Hadoop API 處理多個分析工作負載。Ozone其發展是準備替代HDFS的下一代的巨量資料儲存系統,著力要解決的目前HDFS存在的問題如NameNode的擴充套件性和小檔案的效能問題。
先回顧一下HDFS,HDFS通過把檔案系統後設資料全部載入到資料節點Namenode記憶體中,給使用者端提供了低延遲的後設資料存取。由於後設資料需要全部載入到記憶體,所以一個HDFS叢集能支援的最大檔案數,受Java堆記憶體的限制,上限大概是4億~5億個檔案。所以HDFS適合大量大檔案[幾百兆位元組(MB)以上]的叢集,如果叢集中有非常多的小檔案,HDFS的後設資料存取效能會受到影響。雖然可以通過各種Federation技術來擴充套件叢集的節點規模,但單個HDFS叢集仍然沒法很好地解決小檔案的限制。
Ozone是新一代的物件儲存系統,其架構設計簡單的可以總結為:
Ozone目前社群開發比較活躍;架構比較合理,在擴充套件性和小檔案方面優異;其設計目標和應用場景也比較明確清晰:彌補HDFS的缺陷,替換HDFS在巨量資料領域的地位。
Ozone主要設計要點是可延伸性,它的目標是擴充套件到數十億個物件;Ozone將名稱空間管理和塊空間管理分開;名稱空間由名為Ozone Manager (OM)的守護行程管理,塊空間由Storage Container Manager (SCM)管理。Ozone名稱空間由多個儲存體組成。儲存卷也被用作儲存會計的基礎;Ozone由volumes、buckets、keys組成:
Ozone的核心元件:
使用者端:S3 Gateway 提供 s3 協定的使用者端,Ozone FileSystem為相容HDFS的檔案系統使用者端。
後設資料伺服器
資料伺服器:Datanodes用於儲存資料,Containers就是block的集合,用於儲存資料,其分佈在Data Node上。所有資料都儲存在資料節點上。使用者端以塊的形式寫資料。Datanode將這些塊聚合到一個儲存容器中。儲存容器是使用者端寫的關於塊的資料流和後設資料。
Containers是Ozone/ hdd的基本複製單元,它們由儲存容器管理器(SCM)服務管理。容器是大的二進位制儲存單元(預設為5Gb),可以包含多個塊,Container是資料複製(data replication)的基本單位。
Open | Close |
---|---|
mutable (不能刪除,可追加寫) | Immutable (可以刪除,不能追加寫) |
replicated with RAFT(Ratis) (寫操作是通過 raft協定複製完成) | replicated with async container copy (刪除操作和資料修復操作不需要raft協定) |
Raft leader is used to READ/WRITE (寫操作需要通過Leader,只能通過Leader讀寫) | All the nodes can be used to READ (所以節點都可以讀) |
Recon Server:系統監控和管理
Ozone管理器是名稱空間管理器,儲存容器管理器管理物理層和資料層,Recon是Ozone的管理介面。從另一個的視角來看Ozone,將其想象為構建在hdd(一個分散式塊儲存)之上的名稱空間服務的Ozone Manager。視覺化臭氧的方法是觀察功能層;這裡有後設資料管理層,由Ozone管理器和儲存容器管理器組成。資料儲存層基本上是資料節點,由SCM管理。由Ratis提供的複製層用於複製後設資料(OM和SCM),也用於在資料節點上修改資料時保持一致性。Recon管理伺服器與Ozone的所有其他元件進行通訊,併為Ozone提供統一的管理API和使用者體驗。協定匯流排允許通過其他協定擴充套件Ozone。目前只有通過協定匯流排構建的S3協定支援。協定匯流排提供了一個通用概念,可以實現呼叫O3 Native協定的新檔案系統或物件儲存協定。Apache Ratis是開源的java版的raft協定的實現。對於資料和後設資料都用了Raft協定來保障資料的一致性和高可用。
寫入資料時,向Ozone管理器請求一個塊,Ozone管理器會返回一個塊並記住該資訊
當讀取該檔案時,由Ozone Manager返回需要塊的地址。
# 如果是用於開發測試,可以通過容器啟動Ozone;啟動一體化Ozone容器最簡單的方法是從docker hub中使用最新的docker映象,該容器將執行所需的後設資料伺服器(Ozone Manager、Storage container Manager)、一個資料節點和S3相容的REST伺服器(S3 Gateway)。
docker run -p 9878:9878 -p 9876:9876 apache/ozone
# 本地多容器叢集,如果要部署偽叢集,每個元件在自己的容器中執行,則可以使用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
# 如果需要多個資料節點,可以按比例擴充套件:
docker-compose up -d --scale datanode=3
存取Ozone Recon的控制檯頁面http://hadoop3:9888 ,檢視概覽可以看下Datanodes、Pipelines、Volumes、Buckets、Keys等,還可以檢視資料節點資訊
可以在一個真正的叢集中設定臭氧,建立一個真正的叢集,其組成部分
# 下載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
# 進入目錄
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
# 資料節點啟動
ozone --daemon start datanode
# 簡潔啟動
ozone scm --init
ozone om --init
start-ozone.sh
Ozone shell是從命令列與Ozone互動的主要介面,其背後使用Java API。如果不使用ozone sh命令,就無法存取一些功能。例如:
所有這些都是一次性的管理任務。應用程式可以使用其他介面,如Hadoop相容檔案系統(o3fs或ofs)或S3介面來使用臭氧,而不需要這個CLI。
# 檢視卷的幫助ozone sh volume --help# 檢視具體操作幫助ozone sh volume create --help# 建立卷ozone sh volume create /vol1# 檢視卷資訊ozone sh volume info /vol1# 列出卷ozone sh volume list /
# 建立桶ozone sh bucket create /vol1/bucket1# 檢視桶ozone sh bucket info /vol1/bucket1# 儲存鍵資料ozone sh key put /vol1/bucket1/anaconda-post.log /anaconda-post.log# 檢視鍵資料ozone sh key info /vol1/bucket1/anaconda-post.log# 讀取鍵資料到本地ozone sh key get /vol1/bucket1/anaconda-post.log /data/
# 指定URLozone sh bucket info o3://172.28.0.8:9862/vol1/bucket1
Hadoop相容的檔案系統介面允許像Ozone這樣的儲存後端輕鬆整合到Hadoop生態系統中。Ozone檔案系統是一個與Hadoop相容的檔案系統。
目前,Ozone支援o3fs://和ofs://兩種方案。o3fs和ofs之間最大的區別在於,o3fs只支援單個桶上的操作,而ofs支援跨所有卷和桶的操作,並提供所有卷/桶的完整檢視。
卷和掛載位於OFS檔案系統的根級別。桶自然列在卷下。鍵和目錄位於每個桶的下面。注意,對於掛載,目前只支援臨時掛載/tmp。
請將下面內容新增到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
設定了預設的檔案系統,使用者就可以執行ls、put、mkdir等命令。
# 建立卷,也即是建立目錄hdfs dfs -mkdir /volume1# 建立桶,也即是建立二級目錄hdfs dfs -mkdir /volume1/bucket1# 寫入資料檔案hdfs dfs -put /tmp/data.txt /volume1/bucket1/# 檢視檔案hdfs dfs -ls /volume1/bucket1/
通過Ozone的shell也能檢視對應的資訊
# o3fshdfs dfs -ls o3fs://bucket.volume.cluster1/prefix/# ofshdfs dfs -ls ofs://cluster1/volume/bucket/prefix/
Recon API v1是一組HTTP端點,可幫助瞭解Ozone叢集的當前狀態,並在需要時進行故障排除。
標記為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
這個相當於管理頁面的後臺介面