Apache Ozone 介绍与部署使用(最新版2.0.0)
目录
一、软件介绍
二、软件架构
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