目錄
一、軟件介紹
二、軟件架構
Ozone Manager(OM)
Storage Container Manager(SCM)
Containers
Datanodes
Storage Containers
Recon
Recon 和 Ozone Manager
Recon 和 Storage Container Manager
三、安裝部署
準備環境
1、軟件下載
2、上傳解壓
3、添加系統環境變量
4、修改參數
a、修改ozone-site
b、修改ozone-env
c、創建workers
5、初始化Ozone
a、初始化?SCM?
b、初始化OM(scm需要啟動狀態)
c、初始化DataNode
6、啟動與關閉
7、瀏覽器驗證
a、訪問om web
b、訪問scm web
c、訪問datanode
四、基本應用
一、軟件介紹
Apache Ozone 是一個高度可擴展的分布式存儲,適用于分析、大數據和云原生應用。Ozone 支持與 S3 兼容的對象 API 以及與 Hadoop 兼容的文件系統實現。它針對高效的對象存儲和文件系統操作進行了優化。
它建立在稱為 Hadoop 分布式數據存儲 (HDDS) 的高可用性、復制塊存儲層上。
使用 Apache Spark、YARN 和 Hive 等框架的應用程序無需任何修改即可原生運行。
Ozone 是 Hadoop 的分布式對象存儲系統,具有易擴展和冗余存儲的特點。
Ozone 不僅能存儲數十億個不同大小的對象,還支持在容器化環境(比如 Kubernetes)中運行。
Apache Spark、Hive 和 YARN 等應用無需任何修改即可使用 Ozone。Ozone 提供了?Java API、S3 接口和命令行接口,極大地方便了 Ozone 在不同應用場景下的使用。
Ozone 的管理由卷、桶和鍵組成:
- 卷的概念和用戶賬號類似,只有管理員可以創建和刪除卷。
- 桶的概念和目錄類似,用戶可以在自己的卷下創建任意數量的桶,每個桶可以包含任意數量的鍵,但是不可以包含其它的桶。
- 鍵的概念和文件類似,用戶通過鍵來讀寫數據。
官網地址:Apache Ozone
官方文檔:Documentation for Apache Ozone
二、軟件架構
Ozone 通過對命名空間與塊空間的管理進行分離,大大增加了其可擴展性,其中命名空間由?Ozone Manager?(OM)管理,塊空間由?Storage Container Manager(SCM)管理。
Ozone 的管理由卷、桶和鍵組成。卷類似于個人主目錄,只有管理員可以創建。卷用來存儲桶,用戶可以在一個卷中創建任意數量的桶,桶中包含鍵,在 Ozone 中通過鍵來存儲數據。
Ozone 的命名空間由存儲卷組成,同時存儲卷也用作存儲賬戶管理。
下面的框圖展示了 Ozone 的核心組件:
任何分布式系統都可以從不同角度去觀察。一種觀察角度是,把 Ozone 看作是在分布式塊存儲(HDDS)之上加了一個命名空間服務(OM)。
另一種角度是把 Ozone 看作由幾個不同的功能層組成:由 OM 和 SCM 組成的元數據管理層;由數據節點以及 SCM 構成的數據存儲層;由 Ratis 提供的副本層,用來復制 OM 和 SCM 的元數據以及在修改數據節點上數據時保持數據一致性;Recon 是管理服務器,它負責和其它 Ozone 組件通信,并提供統一的管理 API 和界面。
Ozone Manager(OM)
Ozone Manager(OM)管理 Ozone 的命名空間。
當向 Ozone 寫入數據時,你需要向 Ozone Manager 請求一個塊,Ozone Manager 會返回這個塊并記錄下相關信息。當你想要讀取那個文件時,你則需要先通過 Ozone Manager 獲取那個塊的地址。Ozone Manager 還允許用戶在卷和桶下組織鍵,卷和桶都是命名空間的一部分,也由 Ozone Manager 管理。每個卷都是 OM 下一個獨立命名空間的根,這一點和 HDFS 不同,HDFS 提供的是單個根目錄的文件系統。
Ozone 的命名空間是卷的集合,或者可以看作是相對于 HDFS 單根樹狀結構的森林。因此,Ozone 可以非常容易地支持部署多個 OM 來進行擴展(待未來開發)。
Storage Container Manager(SCM)
Storage Container Manager (SCM) 是塊空間管理的 leader 節點,其主要職責是創建和管理容器,而容器也是 Ozone 的主要復制單元。
主要職責如下:
Storage Container Manager (SCM) 為 Ozone 集群提供了多項關鍵功能,承擔了集群管理器、證書頒發機構、塊管理器以及復制管理器的角色。
SCM 負責創建 Ozone 集群。當通過?init
?命令啟動 SCM 時,SCM 將創建擔任證書頒發機構所需的集群 ID 和根證書。同時,SCM 負責管理集群中數據節點的整個生命周期。
-
SCM 作為塊管理器,負責將塊分配給相應的數據節點,客戶端可以直接讀寫這些塊;
-
SCM 負責跟蹤所有塊的副本,當有數據節點或磁盤掉線,SCM 偵測到后,會啟動相應的數據節點復制缺失的塊,以確保高可用;
-
SCM 的證書頒發機構?負責為集群中的每個服務頒發身份證書,這種證書架構可以很方便地在網絡層啟用雙向認證(mTLS)。同時,Ozone 的塊令牌也依賴于這種證書架構。
Containers
容器是 Ozone/HDDS 的基本復制單元,由 Storage Container Manager (SCM) 服務管理。
容器是可以包含多個塊的大型二進制單元:
塊作為本地信息,不由 SCM 管理。因此,即使在系統中創建了數十億個小文件(即創建了數十億個塊),數據節點也僅報告容器的狀態,以及復制容器。
當 Ozone Manager 向 SCM 請求分配一個新的塊時,SCM 將找到一個合適的容器,并且產生一個包含?容器ID
?+?本地ID
?的塊Id,客戶端則連接到存儲這個容器的數據節點上。而數據節點則能夠基于?本地ID
?管理這個獨立的塊。
Datanodes
數據節點是 Ozone 中的 worker,所有的數據都存儲在數據節點上,用戶以塊的方式寫數據,數據節點將多個塊聚合成一個存儲容器,存儲容器中包含用戶寫入的數據塊和這些塊的元數據。
Storage Containers
Ozone 的存儲容器是一個自包含的超級塊,容器中包含一系列的 Ozone 塊,以及存儲實際數據的磁盤文件,這是默認的存儲容器格式。對于 Ozone 來說,容器只是提供了一個協議規范,它獨立于具體的存儲格式實現,換句話說,我們可以很容易擴展或引入新的容器實現格式。因此,上述格式應當被看作是 Ozone 存儲容器的參考實現。
Recon
Recon 充當 Ozone 的管理和監視控制臺。它提供了 Ozone 的鳥瞰圖,并通過基于 REST 的 API 和豐富的網頁用戶界面(Web UI)展示了集群的當前狀態,從而幫助用戶解決任何問題。
在較高的層次上,Recon 收集和匯總來自 Ozone Manager(OM)、Storage Container Manager(SCM)和數據節點(DN)的元數據,并充當中央管理和監視控制臺。Ozone 管理員可以使用 Recon 查詢系統的當前狀態,而不會使 OM 或 SCM 過載。
Recon 維護多個數據庫,以支持批處理,更快地查詢和持久化聚合信息。它維護 OM DB 和 SCM DB 的本地副本,以及用于持久存儲聚合信息的 SQL 數據庫。
Recon 還與 Prometheus 集成,提供一個 HTTP 端點來查詢 Prometheus 的 Ozone 指標,并在網頁用戶界面(Web UI)中顯示一些關鍵時間點的指標。
Recon 和 Ozone Manager
Recon 最初從領導者 OM 的 HTTP 端點獲取 OM rocks DB 的完整快照,解壓縮文件并初始化 RocksDB 以進行本地查詢。通過對最后一個應用的序列 ID 的 RPC 調用,定期請求領導者 OM 進行增量更新,從而使數據庫保持同步。如果由于某種原因而無法檢索增量更新或將其應用于本地數據庫,則會再次請求一個完整快照以使本地數據庫與 OM DB 保持同步。因此,Recon 可能會顯示陳舊的信息,因為本地數據庫不會總是同步的。
Recon 和 Storage Container Manager
Recon 還充當數據節點的被動 SCM。在集群中配置 Recon 時,所有數據節點都向 Recon 注冊,并像 SCM 一樣向 Recon 發送心跳、容器報告、增量容器報告等。Recon 使用它從數據節點得到的所有信息在本地構建自己的 SCM rocks DB 副本。Recon 從不向數據節點發送任何命令作為響應,而只是充當被動 SCM 以更快地查找 SCM 元數據。
三、安裝部署
官方參考:Documentation for Apache Ozone
準備環境
自行安裝Java8環境
1、軟件下載
下載地址:Apache Ozone
2、上傳解壓
將下載的ozone-2.0.0.tar.gz上傳到node11服務器節點/usr/local/soft/路徑下,并進行解壓
cd /usr/local/soft/
tar -zxvf ozone-2.0.0.tar.gz
3、添加系統環境變量
vim?/etc/profile
添加如下內容
export OZONE_HOME=/usr/local/soft/ozone-2.0.0
export PATH=$PATH:$OZONE_HOME/bin
export PATH=$PATH:$OZONE_HOME/sbin
export OZONE_CONF_DIR=$OZONE_HOME/etc/hadoop
source /etc/profile
4、修改參數
a、修改ozone-site
vi /usr/local/soft/ozone-2.0.0/etc/hadoop/ozone-site.xml
內容修改如下
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--Licensed to the Apache Software Foundation (ASF) under one or morecontributor license agreements. See the NOTICE file distributed withthis work for additional information regarding copyright ownership.The ASF licenses this file to You under the Apache License, Version 2.0(the "License"); you may not use this file except in compliance withthe License. You may obtain a copy of the License athttp://www.apache.org/licenses/LICENSE-2.0Unless required by applicable law or agreed to in writing, softwaredistributed under the License is distributed on an "AS IS" BASIS,WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.See the License for the specific language governing permissions andlimitations under the License.
--><!-- Put site-specific property overrides in this file. --><configuration><property><name>ozone.metadata.dirs</name><value>/data/ozone/meta</value></property><property><name>ozone.scm.datanode.id.dir</name><value>/data/ozone/meta/node</value></property><property><name>ozone.enabled</name><value>true</value></property><property><name>ozone.om.address</name><value>node11:9862</value></property><property><name>ozone.scm.names</name><value>node11</value></property><property><name>ozone.scm.client.address</name><value>node11:9860</value></property><property><name>hadoop.tmp.dir</name><value>/data/ozone/hadoop-${user.name}</value></property><property><name>nfs.dump.dir</name><value>/data/ozone/.hdfs-nfs</value></property><property><name>dfs.journalnode.edits.dir</name><value>/data/ozone/hadoop/dfs/journalnode/</value></property>
</configuration>
其它參數如下
Ozone 參數匯總
Setting | Value | Comment |
---|---|---|
ozone.metadata.dirs | 文件路徑 | 元數據存儲位置 |
ozone.scm.names | SCM 服務地址 | SCM的主機名:端口,或者IP:端口 |
ozone.scm.block.client.address | SCM 服務地址和端口 | Ozone 內部服務使用(如 OM) |
ozone.scm.client.address | SCM 服務地址和端口 | 客戶端使用 |
ozone.scm.datanode.address | SCM 服務地址和端口 | Datanode 使用 |
ozone.om.address | OM 服務地址 | Ozone handler 和 Ozone 文件系統使用 |
hdds.datanode.dir | 文件路徑 | datanode中數據存儲位置 |
b、修改ozone-env
vi /usr/local/soft/ozone-2.0.0/etc/hadoop/ozone-env.sh
export JAVA_HOME=/usr/local/soft/jdk1.8.0_381
export OZONE_OPTS="-XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled"export OZONE_DATANODE_USER=root
export OZONE_OM_USER=root
export HDFS_SCM_USER=root
export HDFS_OM_USER=root
export HDFS_DATANODE_USER=rootexport OZONE_PID_DIR=/data/ozone/pids
export OZONE_LOG_DIR=/data/ozone/logs
c、創建workers
touch /usr/local/soft/ozone-2.0.0/etc/hadoop/workers
里面添加
node11
注意:如果是集群部署需要添加各個node節點
5、初始化Ozone
在啟動 Ozone 集群之前,需要依次初始化 SCM 和 OM。
a、初始化?SCM?
ozone scm --init
運行SCM
ozone --daemon start scm
b、初始化OM(scm需要啟動狀態)
ozone om --init
啟動OM
ozone --daemon start om
注意: 如果 SCM 未啟動,om --init
?命令會失敗,同樣,如果磁盤上的元數據缺失,SCM 也無法啟動,所以請確保?scm --init
?和?om --init
?兩條命令都成功執行了。
c、初始化DataNode
接下來啟動 Datanode,在每個 Datanode 上運行下面的命令:
ozone --daemon start datanode
6、啟動與關閉
啟動
start-ozone.sh
關閉
stop-ozone.sh
7、瀏覽器驗證
a、訪問om web
地址:http://node11:9874/
b、訪問scm web
地址:http://node11:9876/
c、訪問datanode
地址:http://node11:9882/
四、集群部署
參考:Apache Ozone 2.0.0集群部署-CSDN博客
五、基本應用
參考官方文檔:Documentation for Apache Ozone
創建 Volume
ozone sh volume create /vol1
ozone sh volume create /testvolume1 -q=1GB
查看Volume
ozone sh volume list
基于Volume創建Bucket
ozone sh bucket create /vol1/bucket1
ozone sh bucket create /testvolume1/testbucket
查看Bucket信息
ozone sh bucket info /testvolume1/testbucket
上傳文件
./ozone fs -put /path/to/local/file o3fs://bucket1.vol1/remote/fileozone sh key put /testvolume1/testbucket/testfile testfile
ozone sh key info /testvolume1/testbucket/testfile
下載文件
ozone sh key get /testvolume1/testbucket/testfile getfile
FAQ:
1、OM總是關閉,出現java.lang.UnsatisfiedLinkError: /root/ozone_rocksdb_tools9064409345365245954/libozone_rocksdb_tools.so: /lib64/libstdc++.so.6: version `GLIBCXX_3.4.26' not found (required by /root/ozone_rocksdb_tools9064409345365245954/libozone_rocksdb_tools.so)
解決方案
wget http://www.vuln.cn/wp-content/uploads/2019/08/libstdc.so_.6.0.26.zip
unzip libstdc.so_.6.0.26.zip
sudo cp libstdc++.so.6.0.26 /usr/lib64/
cd /usr/lib64
sudo rm -f libstdc++.so.6
sudo ln -s libstdc++.so.6.0.26 libstdc++.so.6
strings /usr/lib64/libstdc++.so.6 | grep GLIBCXX