HDFS Ozone整体概述
前言
HDFS Ozone对象存储最近会有一个大动作:merge到主代码分支。这就动作具有十分大的意义,因为它意味着Ozone将在下一个最近发布的hadoop版本中出现并可以被广大用户所使用。所以在这个背景下,Ozone第一版本的代码和结构基本已经确定完毕,这个时候,我们再从大的层面来学习、了解这个框架、体系显然还是很有必要的。官方社区已经有许多相应的介绍文档在介绍这方面的内容了。笔者也大致阅读了一下,来简单概述其中一些要点。
Ozone高层设计
首先要明白Ozone是用来干什么的:
基于Apache Hadoop之上用来做亿万数量级对象存储的。
Ozone第一版本内部的架构图如下所示:
下面,笔者依次从上到下介绍其中相关的组件。
Ozone Client
Ozone client客户端在Ozone内部是一个对外部开放使用的模块,比如说Ozone相关的shell命令会触发到ozone client,这就是图中显示的Ozone Cli。
再来说说图中左上角的Rest Handler。这是什么意思呢?Ozone client能够支持2种方式的通信:RPC方式和Restful接口的方式。其中能做到一键切换。
Corona是Ozone内部的性能测试工具,它的原理是利用Ozone客户端接口来做一些benchmark。它可以分为2种模式:online和offline模式。
offline模式:开若干线程创建指定数量级别的随机命名的volume/bucket/key。以此达到在拥有大量key的效果。
online模式:连接一个公开的地址,通过网络爬取的方式下载文件,put到Ozone上。
Ozone文件系统:OzoneFileSysyem
Ozone为了兼容其它框架体系,根据自身独特的数据特点,实现了文件系统接口,称为OzoneFileSystem。这样的话,用户可以以通用的方式来使用Ozone内部的文件对象。在程序上无需做兼容性的改动。
Key Space Manager
Key Space Manager(KSM)负责管理的是Ozone命名空间。所有的volume,bucket、key的记录信息都保存在了KSM中。此角色类似于HDFS的NameNode。KSM与SCM交互通性,然后Ozone client写学数据到最终的block上。最终通过Apache Ratis来实现多副本机制,以此保证HA。
Storage Container Manager
Storage Container Manager(SCM)负责管理“Container”对象,Container在逻辑上存储的是block块对象集合。DataNode是以Container的形式来提供存储能力。
在SCM内部提供了以下抽象的概念:
下面是具体角色介绍:
- Block: block数据块对象,真实存储数据的对象,可以拥有多个副本块。
- Container:Block块集合。
- Pipeline:SCM允许2种Pipeline方式实现多副本:单副本的Standaline模式和多副本的Ratis方式。
- Pool:一组特定的数据节点称为一个pool。将节点按pool分组是为了方便日常的维护升级操作,也是为了扩展性的考虑。
- Node:物理存储数据的地方。
参考资料
1.Ozone: Documentation: Add Ozone overview documentation. https://issues.apache.org/jira/secure/attachment/12889871/HDFS-12551-HDFS-7240.004.patch