簡介
- 眾所周知,HDFS是大數據存儲系統,並在業界得到了廣泛的使用。但是無論大集群還是小集群其擴展性都受NameNode的限制,雖然HDFS可以通過Federation進行擴展,但是依然深受小文件和4億個文件的困擾。
- 於是分布式key-value存儲系統Ozone誕生了,Ozone能夠輕松管理小文件和大文件。
- 其他能處理小文件的存儲方案有Hbase, ceph等, 本人目前所了解的是ceph性能更好, ozone由於未在上產環境中實踐過, 性能對比尚不可知。
- Ozone是專門為Hadoop設計的可擴展的分布式對象存儲系統。
- Hadoop生態中的其它組件如Spark、Hive和Yarn不需要任何修改就可以直接運行在Ozone之上。
- Ozone的使用方式也較為豐富,可以通過命令行直接使用也有java客戶端接口,而且接口支持RPC和REST。
- 組成:
- volumes
- Volumes只有管理員能夠創建和刪除,類似賬號的概念,管理員一般都是給某個團隊或者組織創建一個Volume。
- Buckets是在Volume下,一個Volume可以包含n個Buckets,但是Buckets下面只能是Keys。
- buckets
- 類似目錄, 但只能有一層, 因為Buckets中不能包含其它Buckets。
- Keys
- Keys就是具體的對象,在Buckets中是唯一的,其名字可以是任意字符串,其值就是需要存儲的數據,也就是具體的文件。
- 目前ozone對key的大小沒有限制,bucket可以包含n個keys。
- volumes
設計原則
- Ozone是由一群對大規模Hadoop集群有着豐富運維和管理經驗的工程師設計開發的,因此HDFS在實踐中的優缺點深刻的影響着Ozone的設計和優化。
- Strongly Consistent(強一致性)
- Architectural Simplicity(結構簡化)
- Ozone盡可能的將架構進行簡單化,即使犧牲掉一些可擴展性,但是在擴展性上Ozone並不遜色。Ozone目前在單個集群上可以存儲10億個對象。
- Layered Architecture(分層結構)
- Ozone將namespace management與塊和節點管理層分開,允許用戶分別對其進行擴展。
- Painless Recovery(無痛恢復)
- Open Source(開源)
- Interoperability with Hadoop Ecosystem(具有與Hadoop生態系統的互用性)
架構
-
架構圖
-
Ozone Manager(OM)
- OzoneManager是一個server服務,主要負責Ozone的namespace,記錄所有的volume, bucket和key操作。有點類似HDFS的namenode
-
Storage Container Manager(SCM)
- 類似HDFS中的block manager,是Ozone中一個非常重要的組件,用來管理container的,為OM提供基於block和container的服務。
- container是由一些block組成的集合,這些block相互之間沒有關系。
- SCM與數據節點協同工作從而維護群集所需的復制級別
-
Datanodes
- 如果是基於HDFS部署的Ozone也就是Ozone數據節點功能以插件的功能運行在HDFS的datanode中,則就指HDFS的datanode。
單節點部署
-
需要先部署Hadoop3.0+,具體部署請參考: https://www.cnblogs.com/ronnieyuan/p/11518913.html
-
將tar包解壓並修改ozone目錄名
tar -zxvf hadoop-ozone-0.4.1-alpha.tar.gz -C /opt/ronnie/ mv ozone-0.4.1-alpha/ ozone-0.4.1
-
將Ozone的相關內容復制到Hadoop的home目錄:
cd ozone-0.4.1/ cp libexec/ozone-config.sh /opt/ronnie/hadoop-3.1.2/libexec cp -r share/ozone /opt/ronnie/hadoop-3.1.2/share cp -r share/hadoop/ozoneplugin /opt/ronnie/hadoop-3.1.2/share/hadoop/
-
vim ~/.bashrc 添加ozone環境變量 並source ~/.bashrc 使變量生效。
# Ozone export OZONE_HOME=/opt/ronnie/ozone-0.4.1 export PATH=$OZONE_HOME/bin:$PATH
-
利用Ozone的命令生成conf文件
ozone genconf /opt/tmp/ # 我先給他生成到一個臨時目錄
-
修改該配置文件
vim /opt/tmp/ozone-site.xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <configuration> <property> <name>ozone.enabled</name> <value>true</value> <tag>OZONE, REQUIRED</tag> <description> Status of the Ozone Object Storage service is enabled. Set to true to enable Ozone. Set to false to disable Ozone. Unless this value is set to true, Ozone services will not be started in the cluster. Please note: By default ozone is disabled on a hadoop cluster. </description> </property> <property> <name>ozone.om.address</name> <value>localhost</value> <tag>OM, REQUIRED</tag> <description> The address of the Ozone OM service. This allows clients to discover the address of the OM. </description> </property> <property> <name>ozone.metadata.dirs</name> <value>/opt/ronnie/hadoop-3.1.2/ozone</value> <tag>OZONE, OM, SCM, CONTAINER, STORAGE, REQUIRED</tag> <description> This setting is the fallback location for SCM, OM, Recon and DataNodes to store their metadata. This setting may be used only in test/PoC clusters to simplify configuration. For production clusters or any time you care about performance, it is recommended that ozone.om.db.dirs, ozone.scm.db.dirs and dfs.container.ratis.datanode.storage.dir be configured separately. </description> </property> <property> <name>ozone.scm.client.address</name> <value>localhost</value> <tag>OZONE, SCM, REQUIRED</tag> <description> The address of the Ozone SCM client service. This is a required setting. It is a string in the host:port format. The port number is optional and defaults to 9860. </description> </property> <property> <name>ozone.scm.names</name> <value>localhost</value> <tag>OZONE, REQUIRED</tag> <description> The value of this property is a set of DNS | DNS:PORT | IP Address | IP:PORT. Written as a comma separated string. e.g. scm1, scm2:8020, 7.7.7.7:7777. This property allows datanodes to discover where SCM is, so that datanodes can send heartbeat to SCM. </description> </property> <property> <name>ozone.replication</name> <value>1</value> </property> </configuration>
-
改配置之后復制到Hadoop3.0的conf目錄中
cp /opt/tmp/ozone-site.xml /opt/ronnie/hadoop-3.1.2/etc/hadoop/
-
將Ozone運行在HDFS之上的話,需要在hdfs-site.xml中添加如下內容:
<property> <name>dfs.datanode.plugins</name> <value>org.apache.hadoop.ozone.HddsDatanodeService</value> </property>
-
start-dfs.sh 啟動hdfs
-
其次啟動scm和om,要先啟動scm再啟動om,而且在第一次啟動的時候要先初始化,命令如下:
ozone scm --init ozone --daemon start scm ozone om --init ozone --daemon start om
-
一切正常就可以在OM的UI上查看信息,OM默認端口上9874