您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Ozone1.0如何部署”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Ozone1.0如何部署”這篇文章吧。
HDFS通過把文件系統元數據全部加載到Namenode內存中,給客戶端提供了低延遲的元數據訪問。由于元數據需要全部加載到內存,所以一個HDFS集群能支持的最大文件數,受JAVA堆內存的限制,上限大概是4億左右個文件。所以HDFS適合大量大文件(幾百兆以上)的集群,如果集群中有非常多的小文件,HDFS的元數據訪問性能會受到影響。 Ozone 是一個分布式、多副本的對象存儲系統,并針對大數據場景進行了專門的優化。Ozone 主要圍繞可擴展性進行設計,目標是十億數量級以上的對象存儲。
Ozone Manager(OM)管理 Ozone 的命名空間,提供所有的 Volume, Bucket 和 Key 的新建,更新和刪除操作。
Ozone Manager 只和 Ozone Client 和 Storage Container Manager 通信,并不直接和 Datanode 通信。
當向Ozone寫入數據時,你需要向OM請求一個塊,OM會返回一個塊并記錄下相關信息。當你想要讀取那個文件時,你也需要先通過OM獲取那個塊的地址。
OM 允許用戶在卷和桶下管理鍵,卷和桶都是命名空間的一部分,也由 OM 管理。
每個卷都是 OM 下的一個獨立命名空間的根,這一點和 HDFS 不同,HDFS 提供的是單個根目錄的文件系統。
與 HDFS 中單根的樹狀結構相比,Ozone 的命名空間是卷的集合,或者可以看作是個森林,因此可以非常容易地部署多個 OM 來進行擴展。
OM 維護了卷、桶和鍵的列表。它為每個用戶維護卷的列表,為每個卷維護桶的列表,為每個桶維護鍵的列表。
單點OM通過RocksDB來持久化元數據;
HA模式底層通過 Ratis(實現了Raft協議) 擴展元數據的副本數來實現元數據的HA。
SCM是Ozone的block空間管理的leader節點,主要職責是創建和管理container,container是Ozone的主要復制單元。
SCM為Ozone提供多個關鍵功能,集群管理、證書頒發、塊管理和副本管理:
SCM負責創建Ozone集群,當通過init初始化集群時,SCM將創建證書授權所需的集群標識和根證書。 SCM管理著集群中數據節點datanode的生命周期。
SCM的證書授權為集群中每個服務頒發身份證書,這個基礎證書讓服務在網絡層更容易啟動mTLS(雙向認證),并且塊的基礎token也依賴于這個基礎證書。
SCM是塊管理器,它分配塊并將他們分配給數據節點,客戶端可以直接對這些塊進行讀寫操作。
SCM持續跟蹤所有的塊副本,如果數據節點或者磁盤損壞,SCM會檢測到并會指示數據節點復制丟失的數據塊以確保高可用性。
Block是數據塊對象,真實存儲用戶的數據,不由SCM管理。
Container是一個邏輯概念,是由一些相互之間沒有關系的 Block 組成的集合。
在Ozone中,數據是以Container的粒度進行副本復制的,默認大小為5G (ozone.scm.container.size),由SCM服務管理。
Pipeline 來保證 Container 實現想要的副本數。SCM 中目前支持2種 Pipeline 方式實現多副本,單副本的 Standalone 模式和三副本的 Ratis 方式(ozone.replication)。
當Ozone Manager從SCM請求一個新的塊分配時,SCM將識別合適的容器并生成一個包含ContainerId+LocalId的塊id。客戶端將連接到存儲容器的Datanode,Datanode可以根據LocalId管理分離的塊。
Container 有2種狀態,OPEN 和 CLOSED:
當container創建時,它就開始了Open狀態,當它寫滿時(默認5G),它就會關閉并且變成CLOSED的狀態,之后便不可修改。 | OPEN | CLOSED | | :------------: | :------------: | | 可變 | 不可變 | |通過ratis復制 | 使用異步容器copy進行復制| | Raft leader節點用于數據讀寫| 所有節點都用于讀 |
存儲所有數據,客戶端按block寫入數據,數據節點將這些block聚合到存儲container中, container中包含用戶寫入的數據塊和這些塊的元數據。
Ozone container存儲容器是一個自包含的超級塊,容器中包含一系列的Block,以及存儲實際數據的磁盤文件,是默認的存儲容器格式。
當客戶端想從Ozone讀取數據,客戶端向OM發送數據文件的名字,OM會返回組成這個文件的塊列表,一個Ozone塊包含一個container ID 和一個local ID,container ID讓客戶端發現container的位置,container的相關信息由SCM提供,在大多數情況下,container位置由Ozone Manager緩存,并與Ozone塊一起返回。
當客戶端找到了container,也就是知道了哪些數據節點包含這些container,客戶端會連接到數據節點并且讀取由container ID:Local ID指定的數據流,換句話說,Local ID用作容器的索引,從container中讀取想要的數據流。
容器的位置發現
SCM 如何獲得容器的位置?這一點和現有的 HDFS 十分相似。數據節點會定期發送類似于塊報告的容器報告,容器報告比塊報告的內容簡潔的多,比如,對于一個存儲容量為 196 TB 的集群,Ozone 大概會擁有四萬個容器,相比于 HDFS 的一百五十萬個塊,塊報告數量縮減為四十分之一。
這種間接管理的方式大大地提高了 Ozone 的擴展性,因為 SCM 需要處理的塊數據大大減少,且命名服務(OM)作為一個獨特的服務主體對于擴展 Ozone 具有重要意義。
Ozone的監控頁面
Ozone的s3 compatible REST gateway
Ozone 的命名空間由volume組成,同時volume也用作存儲賬戶管理。
Ozone Manager(OM) 管理命名空間,Storage Container Manager(SCM) 管理底層的數據,而 Recon 是 Ozone 的管理接口。
Ozone數據的邏輯存儲架構
Volumes(卷): 類似于用戶賬號,只有管理員可以創建volumes,可以做配額管理,用于存儲buckets,一個volume下可以包含多個buckets。
Buckets(桶): 類似于目錄,用戶可以在自己的卷下創建任意數量的桶,一個bucket可以包含無數個keys,buckets不能包含其他buckets,它們之間互不干擾。
Keys(鍵): 類似于文件,位于bucket下,用于讀寫數據。
服務 | 端口 | 參數 | 備注 |
---|---|---|---|
Datanode | 9858 | dfs.container.ratis.ipc | Datanode節點 |
Datanode | 9859 | dfs.container.ipc | Datanode節點 |
SCM | 9860 | ozone.scm.client.address | |
SCM | 9861 | ozone.scm.datanode.address | scm和datanode通信端口 |
OM | 9862 | ozone.om.address | |
SCM | 9863 | ozone.scm.block.client.port | |
OM | 9874 | ozone.om.http-address | OM web頁面 |
SCM | 9876 | ozone.scm.http-address | SCM web頁面 |
S3G | 9878 | ozone.s3g.http-address | S3Gateway |
Datanode | 9882 | hdds.datanode.http-address | Datanode節點 |
Recon | 9888 | ozone.recon.http-address | Recon web頁面 |
Recon | 9891 | ozone.recon.address | 默認無,Datanode節點必配參數,以便Recon可以監測到Datanode服務 |
OZONE和HDFS不要部署在同一個節點上,因為OZONE的環境變量會和HADOOP共用,服務啟動會沖突,可以修改環境變量相關腳本進行更改。
# cat /etc/hosts 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6 172.16.40.21 ozom-1 172.16.40.22 ozom-2 172.16.40.23 ozom-3 172.16.40.11 ozdn-1 172.16.40.12 ozdn-2 172.16.40.13 ozdn-3
# systemctl stop firewalld && systemctl disable firewalld
# setenforce 0 && sed -i "s/^SELINUX=enforcing/SELINUX=disabled/g" /etc/selinux/config
ntpd
# useradd hadoop
略
Hostname | Ip | Service |
---|---|---|
ozom-1 | 172.16.40.21 | OM、SCM、DataNode |
ozom-2 | 172.16.40.22 | DataNode |
ozom-3 | 172.16.40.23 | DataNode |
ozdn-1 | 172.16.40.11 | DataNode |
ozdn-2 | 172.16.40.12 | DataNode |
ozdn-3 | 172.16.40.13 | DataNode |
創建Datanode的數據目錄 掛載到磁盤上
# mkdir -p /data/disk{1..2} # chown -R hadoop:hadoop /data/disk{1..2}
創建ozone相關目錄
# mkdir -p /opt/dlw/{conf,soft,logs,metadata,tmp} # chown -R hadoop:hadoop /opt/dlw $ mkdir -p /opt/dlw/logs/ozone $ mkdir -p /opt/dlw/tmp/run $ mkdir -p /opt/dlw/metadata/ozone/{om,node,recon,ratis,scm}
所有節點都需配置
配置ozone
export OZONE_HOME=/opt/dlw/soft/ozone export PATH=$OZONE_HOME/sbin:$OZONE_HOME/bin:$PATH export HADOOP_OPTS="-XX:ParallelGCThreads=8 -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+CMSParallelRemarkEnabled" export HADOOP_PID_DIR=/opt/dlw/tmp/run export HADOOP_LOG_DIR=/opt/dlw/logs/hadoop
Ozone 下載的二進制包,直接解壓使用,拷貝至所有節點
$ tar -zxvf hadoop-ozone-1.0.0.tar.gz -C /opt/dlw/soft/ $ cd /opt/dlw/soft/ $ mv ozone-1.0.0 ozone
生成配置
$ ozone genconf $OZONE_HOME/etc/hadoop
修改配置
$ vim $OZONE_HOME/etc/hadoop/ozone-site.xml <?xml version="1.0" encoding="UTF-8" standalone="yes"?> <configuration> <property> <name>ozone.om.address</name> <value>ozom-1</value> </property> <property> <name>ozone.om.http-address</name> <value>ozom-1:9874</value> </property> <property> <name>ozone.om.db.dirs</name> <value>/opt/dlw/metadata/ozone/om</value> </property> <property> <name>ozone.metadata.dirs</name> <value>/opt/dlw/metadata/ozone</value> </property> <property> <name>ozone.om.ratis.enable</name> <value>false</value> </property> <property> <name>ozone.om.service.ids</name> <value>omdlw001</value> </property> <property> <name>ozone.om.nodes.omdlw001</name> <value>om1,om2,om3</value> </property> <property> <name>ozone.om.address.omdlw001.om1</name> <value>ozom-1</value> </property> <property> <name>ozone.om.address.omdlw001.om2</name> <value>ozom-2</value> </property> <property> <name>ozone.om.address.omdlw1.om3</name> <value>ozom-3</value> </property> <property> <name>ozone.scm.client.address</name> <value>ozom-1</value> </property> <property> <name>ozone.scm.names</name> <value>ozom-1</value> </property> <property> <name>ozone.scm.container.size</name> <value>5GB</value> </property> <property> <name>ozone.scm.db.dirs</name> <value>/opt/dlw/metadata/ozone/scm</value> </property> <property> <name>ozone.scm.pipeline.owner.container.count</name> <value>3</value> </property> <property> <name>ozone.scm.datanode.id.dir</name> <value>/opt/dlw/metadata/ozone/node</value> </property> <property> <name>ozone.scm.block.client.address</name> <value>ozom-1</value> </property> <property> <name>ozone.scm.datanode.address</name> <value>ozom-1</value> </property> <property> <name>hdds.datanode.dir</name> <value>/data/disk1,/data/disk2</value> </property> <property> <name>ozone.recon.db.dir</name> <value>/opt/dlw/metadata/ozone/recon</value> </property> <property> <name>ozone.recon.address</name> <value>ozom-1:9891</value> </property> <property> <name>recon.om.snapshot.task.interval.delay</name> <value>1m</value> </property> <property> <name>dfs.container.ratis.datanode.storage.dir</name> <value>/opt/dlw/metadata/ozone/ratis</value> </property> </configuration>
$ vim $OZONE_HOME/etc/hadoop/workers ozom-1 ozom-2 ozom-3 ozdn-1 ozdn-2 ozdn-3
scm
$ ozone scm --init $ ozone --daemon start scm
om
$ ozone om --init $ ozone --daemon start om
datanode –所有datanode節點
$ ozone --daemon start datanode
recon
$ ozone --daemon start recon
s3g
$ ozone --daemon start s3g
$ jps 6721 ReconServer 7589 Gateway 4934 StorageContainerManagerStarter 5479 OzoneManagerStarter 5705 HddsDatanodeService 7662 Jps
scm
om
s3g
recon
Hostname | Ip | Service |
---|---|---|
ozom-1 | 172.16.40.21 | OM、SCM、DataNode |
ozom-2 | 172.16.40.22 | OM |
ozom-3 | 172.16.40.23 | OM |
ozdn-1 | 172.16.40.11 | DataNode |
ozdn-2 | 172.16.40.12 | DataNode |
ozdn-3 | 172.16.40.13 | DataNode |
高可用目前只有OM服務支持HA,SCM尚不支持: 單點OM通過RocksDB來持久化元數據; 高可用模式底層通過 Ratis(實現了Raft協議) 擴展元數據的副本數來實現元數據的HA。
修改配置,開啟OM的HA模式
<property> <name>ozone.om.ratis.enable</name> <value>true</value> </property>
一個ozone-site.xml支持多個Ozone HA配置,為了在可用的HA集群之間進行選擇,每個集群都需要一個邏輯名稱,該名稱可以解析為OM的IP地址(或域名)。
<property> <name>ozone.om.service.ids</name> <value>cluster1,cluster2</value> </property>
此處只有一個集群,自定義一個集群名稱omdlw001
<property> <name>ozone.om.service.ids</name> <value>omdlw001</value> </property>
對于這個集群可以定義他的所有om,并對每個om的節點進行配置
<property> <name>ozone.om.nodes.omdlw001</name> <value>om1,om2,om3</value> </property> <property> <name>ozone.om.address.omdlw001.om1</name> <value>ozom-1</value> </property> <property> <name>ozone.om.address.omdlw001.om2</name> <value>ozom-2</value> </property> <property> <name>ozone.om.address.omdlw001.om3</name> <value>ozom-3</value> </property>
在三個om節點上都啟動om服務,但是必須得注意,高可用的om服務不能與datanode服務同處于同一個節點,因為2者都使用ratis會沖突。
$ ozone om --init $ ozone --daemon start om
以上是“Ozone1.0如何部署”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。