扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要为大家展示了“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.xmlozone.om.address ozom-1 ozone.om.http-address ozom-1:9874 ozone.om.db.dirs /opt/dlw/metadata/ozone/om ozone.metadata.dirs /opt/dlw/metadata/ozone ozone.om.ratis.enable false ozone.om.service.ids omdlw001 ozone.om.nodes.omdlw001 om1,om2,om3 ozone.om.address.omdlw001.om1 ozom-1 ozone.om.address.omdlw001.om2 ozom-2 ozone.om.address.omdlw1.om3 ozom-3 ozone.scm.client.address ozom-1 ozone.scm.names ozom-1 ozone.scm.container.size 5GB ozone.scm.db.dirs /opt/dlw/metadata/ozone/scm ozone.scm.pipeline.owner.container.count 3 ozone.scm.datanode.id.dir /opt/dlw/metadata/ozone/node ozone.scm.block.client.address ozom-1 ozone.scm.datanode.address ozom-1 hdds.datanode.dir /data/disk1,/data/disk2 ozone.recon.db.dir /opt/dlw/metadata/ozone/recon ozone.recon.address ozom-1:9891 recon.om.snapshot.task.interval.delay 1m dfs.container.ratis.datanode.storage.dir /opt/dlw/metadata/ozone/ratis
$ 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模式
ozone.om.ratis.enable true
一个ozone-site.xml支持多个Ozone HA配置,为了在可用的HA集群之间进行选择,每个集群都需要一个逻辑名称,该名称可以解析为OM的IP地址(或域名)。
ozone.om.service.ids cluster1,cluster2
此处只有一个集群,自定义一个集群名称omdlw001
ozone.om.service.ids omdlw001
对于这个集群可以定义他的所有om,并对每个om的节点进行配置
ozone.om.nodes.omdlw001 om1,om2,om3 ozone.om.address.omdlw001.om1 ozom-1 ozone.om.address.omdlw001.om2 ozom-2 ozone.om.address.omdlw001.om3 ozom-3
在三个om节点上都启动om服务,但是必须得注意,高可用的om服务不能与datanode服务同处于同一个节点,因为2者都使用ratis会冲突。
$ ozone om --init $ ozone --daemon start om
以上是“Ozone1.0如何部署”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注创新互联行业资讯频道!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流