简介
- 众所周知,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