Apache Ozone0.4.0调研

为什么有Ozone

对象存储比标准文件系统更容易构建和使用。 缩放对象库也更容易。 大多数大数据应用程序和框架(如Apache Spark,YARN和Hive)都可以在云端和本地运行,这使得在本地存储对象存储非常具有吸引力。众所周知,HDFS是大数据存储系统,并在业界得到了广泛的使用。但是无论大集群还是小集群其扩展性都受NN的限制,虽然HDFS可以通过Federation进行扩展,但是依然深受小文件和4亿个文件的困扰

于是分布式key-value存储系统Ozone诞生了,Ozone能够轻松管理小文件和大文件。

Ozone

Ozone是专为大数据应用程序设计的对象库。大数据工作负载往往与标准工作负载非常不同,Ozone源自在数千个集群中运行Hadoop的经验教训。Hadoop生态中的其它组件如Spark、Hive和Yarn可以直接运行在Ozone之上。Ozone的使用方式也较为丰富,可以通过命令行直接使用也有java客户端接口,而且接口支持RPC和REST。

Ozone由volumes、buckets和Keys组成,其中

     Volumes只有管理员能够创建和删除,类似账号的概念,管理员一般都是给某个团队或者组织创建一个Volume。

     Buckets有点像目录,不过这个只能有一层,因为Buckets中不能包含其它Buckets。Buckets是在Volume下,一个Volume可以包含n个Buckets,但是Buckets下面只能是Keys。

     Keys就是具体的对象,在Buckets中是唯一的,其名字可以是任意字符串,其值就是需要存储的数据,也就是具体的文件。目前ozone对key的大小没有限制,bucket可以包含n个keys。

Ozone设计特点:

   SCALABLE(可扩展性):Ozone可扩展到数百亿个文件和块,并在未来甚至更多。

   CONSISTENT(一致性):Ozone是一个非常一致的对象存储。 通过使用诸如RAFT之类的协议来实现这种一致性。

   SECURE(安全):Ozone与kerberos基础设施集成,用于访问控制,并支持TDE和线上加密。

   MULTI-PROTOCOL SUPPORT(多协议支持):Ozone支持不同的协议,如S3和Hadoop文件系统API

   HIGHLY AVAILABLE(高可用性):Ozone是一个完全复制的系统,旨在经受多次故障。

   Interoperability with Hadoop Ecosystem:Ozone的设计适用于YARN和Kubernetes等集装箱化环境;Ozone可以被现存的Hadoop生态和相关的应用(如 apache hive、apache spark 和传统的 mapreduce)使用,因此Ozone支持: Hadoop Compatible FileSystem API(也叫OzoneFS) – hive、spark等可以使用OzoneFS API Ozone作为存储层,而不需要做任务修改。

Ozone对Apach Spark支持:

如果你有一个基于Spark的应用程序,并且您希望它与Ozone一起使用。如果您当前的存储系统是HDFS,那么您将使用以hdfs://开头的URL将数据位置传递给您的应用程序。如果用03fs代替hdfs://://应用程序将开始使用臭氧桶中的数据。

Ozone对S3应用程序的支持:

zone支持S3协议作为一流的接口。因此,你可以使用现有的基于S3的应用程序并更改S3服务器地址。但如果你的S3服务器是安全的,同时你有一个安全的Ozone集群请通过运行“kinit”登录,并通过运行“ozone s3 getsecret”请求臭氧aws凭证。此命令将向Ozone管理器显示您的Kerberos凭据,Ozone管理器将返回您可以放入.aws文件的访问密钥ID和秘密访问密钥。如果未打开安全性,则可以在这些字段中放置任何内容,因为不会在服务器端强制执行安全性。

架构:

下面是Ozone在发行第一个版本时的架构图:

在架构上Ozone由三部分组成,分别为Ozone ManagerStorage Container ManagerDatanodes。架构图如下:

Ozone Manager(OM):

OzoneManager是一个server服务,主要负责Ozone的namespace,记录所有的volume, bucket和key操作。有点类似HDFS的namenode ,Ozone由volumes、buckets和Keys组成,其中每个volume是一个namespace的根节点(与HDFS不同,HDFS只提供了一个根节点),所以整个Ozone namespace是一个volumes的集合或者是一个由类似HDFS那样的树节点组成的森林。OM中也存储了Ozone的一些元数据信息,这些元数据信息包括volumes、buckets和keys,底层通过Ratis扩展元数据的副本数来实现HA。

Storage Container Manager(SCM):

类似HDFS中的block manager,是Ozone中一个非常重要的组件,用来管理container的,为OM提供基于block和container的服务。container是由一些block组成的集合,这些block相互之间没有关系。SCM和数据节点协同工作以维护群集所需的复制级别

关于SCM的作用通过一个使用实例来说明下 – 由客户端调用putKey(keyName, data, pipeline type, replication count)发起一个putKey操作,

参数说明keyName是指文件的名字。data是指要写入的数据。pipeline type指block的副本策略,Ozone目前支持Stand Alone和Ratis两种策略。replication count是指block有多少个副本一般情况下pipeline type和replication count不用指定,直接使用默认的就行。

整个流程为:OM收到putKey请求,向SCM发送一个请求,请求一个包含特定属性的pipeline实例。例如客户端要求Ratis存储策略并且副本数是3,则OM请求SCM返回一个满足此特性的datanode set。如果SCM能够实例化这样一个pipeline(也就是一个datanode set),则将这些dn返回给OM。OM则存储这些信息并将此信息包装成一个元组{BlockID, ContainerName, and Pipeline}。**这里也有点类似HDFS写流程。如果SCM并没有找到一组datanode set来满足clinet的要求则SCM创建一个逻辑管道,然后返回它**

从上面的调用过程中可以看出OM与SCM的关系,SCM作为block manager。当client向OM请求datanode set写数据数据时,OM需要向SCM请求block。block从SCM以pipeline的形式返回,此时pipeline是由参与block副本的一组datanode。

SCM主要用来管理blocks、containers和pipelines,为了返回正常可用的pipelines,SCM必须找到node的健康状态,所以SCM也会监听datanode发来的心态,扮演着datanode manager的角色。

  SCM内部结构为:

   

lock:block数据块对象,真实存储数据的对象,可以拥有多个副本块。

Container:在逻辑上存储的是Block块对象集合。

Pipeline:SCM允许2种Pipeline方式实现多副本:单副本的Standaline模式和多副本的Ratis方式。

Pool:一组特定的数据节点称为一个pool。将节点按pool分组是为了方便日常的维护升级操作,也是为了扩展性的考虑。

Node:物理存储数据的地方。

Datanodes:

如果是基于HDFS部署的Ozone也就是Ozone数据节点功能以插件的功能运行在HDFS的datanode中,则就指HDFS的datanode。Ozone也可以单独部署,此时指运行Ozone数据节点的守护进程。DataNode中以Container基本存储单元。

Ozone Client:

Ozone client在Ozone内部是一个对外开放使用的模块,比如说Ozone相关的shell命令会触发到ozone client,这就是图中显示的Ozone Cli。

Rest Handler:

Rest Handle是一个钩子,能够做到RPC和Restful通信方式的一键切换。Ozone client能够支持2种方式的通信:RPC方式和Restful接口的方式。

Freon:

Freon是Ozone内部的性能测试工具。

OzoneFileSysyem:

Ozone为了兼容其它框架体系,根据自身独特的数据特点,实现了文件系统接口,称为OzoneFileSystem。这样的话,用户可以以通用的方式来使用Ozone内部的文件对象。在程序上无需做兼容性的改动。

Hadoop Distributed Data Store:

上面的架构图中只剩下Hadoop Distributed Data Store没有介绍了,其实Hadoop Distributed Data Store(HDDS)是由Containers、Ratis和SCM组成的,是一个没有全局命名空间的分布式块存储层。

 

Ozone部署(这里描述均是单节点部署,如果是集群部署只需要吧节点名称添加到$OZONE_HOME/etc/hadoop/worker并复制该节点配置到其他节点,同时保证集群节点间均已配置ssh免秘钥登录):

1,从官网下载Ozone0.4.0并解压到相关安装目录(/home/hadoop/app/);http://mirror.bit.edu.cn/apache/hadoop/ozone/ozone-0.4.0-alpha/hadoop-ozone-0.4.0-alpha.tar.gz 

为了方便将解压出来的目录ozone-0.4.0-alpha重命名为ozone;即Ozone的家目录为:/home/hadoop/app/ozone

2,利用Ozone的命令生成conf文件,ozone genconf ./etc/hadoop,此命令会生成ozone-site.xml文件,修改配置之后link到Hadoop3.1配置文件目录的$HADOOP_HOME/etc/hadoop/目录中。

配置文件内容:

<?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:5678</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/hadoop/ozone</value>
 <tag>OZONE, OM, SCM, CONTAINER, REQUIRED, STORAGE</tag>
 <description>
 Ozone metadata is shared among OM, which acts as the namespace
 manager for ozone, SCM which acts as the block manager and data nodes
 which maintain the name of the key(Key Name and BlockIDs). This
 replicated and distributed metadata store is maintained under the
 directory pointed by this key. Since metadata can be I/O intensive, at
 least on OM and SCM we recommend having SSDs. If you have the luxury
 of mapping this path to SSDs on all machines in the cluster, that will
 be excellent.

 If Ratis metadata directories are not specified, Ratis server will emit a
 warning and use this path for storing its metadata too.
 </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>

3,此时就可以启动相关的服务了,要先启动scm再启动om,而且在第一次启动的时候要先初始化,命令如下:

cd /home/hadoop/app/ozone

bin/ozone scm --init
bin/ozone --daemon start scm
bin/ozone om --init
bin/ozone --daemon start om

如果已经初始化完成,以后启动可以执行启动脚本:

sbin/start-ozone.sh

一切正常就可以在OM的UI上查看信息,OM默认端口上9874,地址为http://omserver:9874/

Hadoop支持o3fs文件系统:

1,先安装hadoop,hadoop的安装部署这里不做说明

2,先按Ozone部署方式部署好Ozone(不启动);

3,将Ozone的ozone-site.xml配置文件link到$HADOOP_HOME/etc/hadoop/。命令如下:

ln -s  /home/hadoop/app/ozone/etc/hadoop/ozone-site.xml /home/hadoop/app/hadoop/etc/hadoop/

4,在$HADOOP_HOME/etc/hadoop/core-site.xml中添加如下内容:

<property>
  <name>fs.o3fs.impl</name>
  <value>org.apache.hadoop.fs.ozone.OzoneFileSystem</value>
</property>

5,在$HADOOP_HOME/etc/hadoop/hadoop-env.sh中添加对应的classpath:

export HADOOP_CLASSPATH=/home/hadoop/app/ozone/share/ozone/lib/hadoop-ozone-filesystem-lib-current-0.4.0-alpha.jar:$HADOOP_CLASSPATH

6,重启hadoop

7,启动Ozone相关服务;

8,验证:

创建一个Volume:

 

ozone sh volume create /volume

在Volume下创建一个Buket:

ozone sh bucket create /volume/bucket

此时可以就可以通过hadoop相关命令使用o3fs协议查看到Ozone对应/volume/bucket下的keyle:

hdfs dfs -ls o3fs://bucket.volume.om-host.example.com:5678/

或者

hdfs dfs -ls o3fs://bucket.volume/

注意:

ozone/lib/下有两个hadoop-ozone-filesystem-lib包,其中hadoop-ozone-filesystem-lib-current-0.4.0-alpha.jar是对应3.0以上的高版本hadoop, hadoop-ozone-filesystem-lib-legacy-0.4.0-alpha.jar对应3.0以下hadoop版本。

针对hadoop3.x 需要使用hadoop-ozone-filesystem-lib-current-0.4.0-alpha.jar,对应类名:org.apache.hadoop.fs.ozone.OzoneFileSystem

针对hadoop2.x 需要使用hadoop, hadoop-ozone-filesystem-lib-legacy-0.4.0-alpha.jar,对应类名:org.apache.hadoop.fs.ozone.BasicOzoneFileSystem

Hadoop Version

Required jar

OzoneFileSystem implementation

3.2filesystem-lib-currentorg.apache.hadoop.fs.ozone.OzoneFileSystem
3.1filesystem-lib-legacyorg.apache.hadoop.fs.ozone.OzoneFileSystem
2.9filesystem-lib-legacyorg.apache.hadoop.fs.ozone.BasicOzoneFileSystem
2.7filesystem-lib-legacyorg.apache.hadoop.fs.ozone.BasicOzoneFileSystem

 

Ozone结合Hadoop3.x 安装部署:

Ozone与HDFS结合的话需要基于Hadoop3.0以上,所以需要先部署Hadoop3.x,具体部署细节在此略去不做说明。

1,先按 “Hadoop支持o3fs文件系统” 方式部署好Ozone;

2,将Ozone的相关内容link到Hadoop的home目录。命令如下:

 

ln -s /home/hadoop/app/ozone/libexec/ozone-config.sh /home/hadoop/app/hadoop/libexec/
ln -s /home/hadoop/app/ozone/share/ozone /home/hadoop/app/hadoop/share/
ln -s /home/hadoop/app/ozone/share/hadoop/ozoneplugin /home/hadoop/app/hadoop/share/hadoop/

3,在 /home/hadoop/app/ozone/etc/hadoop/hadoop-env.sh声明环境变量:

export HADOOP_HOME=/home/hadoop/app/hadoop

4,在hadoop的配置文件hdfs-site.xml中添加如下内容:

 

<property>
 <name>dfs.datanode.plugins</name>
 <value>org.apache.hadoop.ozone.HddsDatanodeService</value>
</property>

5,此时就可以启动相关的服务了,首先启动namenode和datanode,命令为$HADOOP_HOME/sbin/start-dfs.sh

其次启动scm和om,要先启动scm再启动om,而且在第一次启动的时候要先初始化,命令如下:

cd /home/hadoop/app/ozone

bin/ozone scm --init
bin/ozone --daemon start scm
bin/ozone om --init
bin/ozone --daemon start om

如果已经初始化完成,以后启动可以执行启动脚本:

sbin/start-ozone.sh

6,验证

使用hadoop fs -ls 命令和使用 ozone fs -ls 命令查看到的结果一样,即表示ozone已经成功运行在hadoop之上了。

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值