简介
Apache Hadoop Ozone是一个分布式键值存储,可以高效地管理大小文件。Ozone旨在与现有的Apache Hadoop生态系统很好地配合使用,并且满足了对新的开源对象存储的需求,该对象存储旨在简化操作使用并扩展到单个集群中的数千个节点和数十亿个对象。
较早的文章介绍Ozone和Ozone概述介绍了臭氧的设计理念和关键概念。这篇面向开发人员的文章更深入地介绍了系统体系结构。研究了Ozone的构建基块,并了解如何将它们组合在一起以构建可扩展的分布式存储系统。
了解可伸缩性问题
为了将Ozone扩展到数十亿个文件,需要解决HDFS中存在的两个瓶颈。
命名空间可伸缩性
不能再将整个名称空间存储在单个节点的内存中。关键的见解是名称空间具有引用位置,因此仅可以将工作集存储在内存中。名称空间由称为Ozone Manager的服务管理。
块图可扩展性
这是一个较难解决的问题。与名称空间不同,由于存储节点(DataNodes)定期发送有关系统中每个块的块报告,因此块图不具有引用位置。Ozone将这个问题委托给了一个称为Hadoop分布式数据存储(HDDS)的共享通用存储层。
积木
Ozone由以下关键成分组成。
- 使用现成的键值存储(RocksDB)构建的存储容器。
- 通过Apache Ratis的RAFT共识协议。RAFT是一种共识协议,其实质与Paxos相似,但旨在易于理解和实施。Apache Ratis是RAFT的开源Java实现,针对高吞吐量进行了优化。
- 存储容器管理器(SCM)–一种管理复制容器生命周期的服务。
- Hadoop分布式数据存储(HDDS)–用于不提供名称空间的块的通用分布式存储层。
- Ozone Manager(OM)–一种实现Ozone键值名称空间的名称空间管理器。
放在一起
在本节中,我们将了解如何将这些构造块放在一起以创建分布式键值存储。
储存容器
在最底层,Ozone将用户数据存储在存储容器中。容器是块名称及其数据的键-值对的集合。键是在容器内本地唯一的块名称。值是块数据,范围从0字节到256MB。块名称不必是全局唯一的。
每个容器都支持一些简单的操作:
容器使用RocksDB存储在磁盘上,并针对较大的值进行了一些优化。
RAFT复制
分布式文件系统必须容忍单个磁盘/节点的丢失,因此我们需要一种通过网络复制容器的方法。为此,引入了一些容器的其他属性。
-
- 容器是复制的单位。 因此,其最大大小限制为5GB(管理员可配置)。
- 每个容器可以处于以下两种状态之一:打开或关闭。 打开的容器可以接受新的键值存储,而关闭的容器是不可变的。
- 每个容器都有三个副本。
使用RAFT复制打开的容器状态更改(写入)。 RAFT是基于仲裁的协议,其中仲裁的节点对变更进行投票。 在给定的时间,单个节点充当领导者并提出更改建议。 因此,所有容器操作都可以实时可靠地复制到至少法定数量的节点(2)。
容器副本存储在DataNodes上。
容器生命周期
容器以打开状态开始。客户端编写块以打开容器,然后使用提交操作最终确定块数据。编写块分为两个阶段:
- 写入块数据。根据客户端的速度和网络/磁盘带宽,这可能会花费任意长时间。如果客户端在提交该块之前死亡,则不完整的数据将由SCM自动进行垃圾回收。
- 提交块。此操作从根本上使该块在容器中可见。
存储容器管理器(SCM)
现在,我们知道了如何将块存储在容器中以及如何通过网络复制容器。下一步是构建一个集中服务,该服务知道所有容器在群集中的存储位置。该服务是SCM。
SCM从所有DataNode定期获取报告,告知这些节点上的容器副本及其当前状态。 SCM可以选择三个DataNode的集合来存储新的开放容器,并指示它们相互形成RAFT复制环。
SCM还可以了解容器何时变满,并指示引导副本“关闭”容器。 SCM还可以检测复制的封闭容器下/上的情况,并确保每个封闭容器存在三个副本。
容器+ RAFT + SCM = HDDS!
有了以上三个构建块,就可以完成创建HDDS的所有工作,HDDS是一个没有全局命名空间的分布式块存储层。现在,DataNode被分为三组,每组形成一个Ratis复制环。每个环可以有多个打开的容器。
SCM每30秒从每个DataNode接收一次报告,以通知每个节点上打开和关闭的容器副本。根据此报告,SCM做出决策,例如分配新容器,关闭打开的容器,在磁盘丢失/数据丢失时重新复制关闭的容器。
SCM的客户可以请求分配新块,然后将块数据写入分配的容器中。客户端还可以读取打开/关闭容器中的块并删除块。关键是HDDS本身并不关心单个容器的内容。内容完全由使用SCM的应用程序管理。
添加名称空间– Ozone Manager
有了HDDS,唯一缺少的要素就是全局键值命名空间。这是由OzoneManager提供的。 OM是从键名到相应的块集的映射服务。
客户端可以将多个块写入HDDS,然后提交它们的key-> blocks,将它们原子地映射到OM,以使密钥在名称空间中可见。
OM将自己的状态存储在RocksDB数据库中。
HDDS超越Ozone
HDDS可以被其他分布式文件系统实现用作块存储层。已经讨论并可能在将来实现的一些示例:
- HDDS上的HDFS(HDFS-10419)– HDDS可通过替换现有的HDFS块管理器来巧妙地解决块空间可伸缩性问题。这个想法类似于HDFS-5477提议。
- cBlocks(HDFS-11118)–由HDDS存储支持的可安装iSCSI卷的原型。
- 假设的对象存储,还将其名称空间存储在HDDS容器中。
关于Cloudera
在 Cloudera,我们相信数据可以使今天的不可能,在明天成为可能。我们使人们能够将复杂的数据转换为清晰而可行的洞察力。Cloudera 为任何地方的任何数据从边缘到人工智能提供企业数据云平台服务。在开源社区不懈创新的支持下,Cloudera推动了全球最大型企业的数字化转型历程。
慧都大数据专业团队为企业提供Cloudera大数据平台搭建,免费业务咨询,定制开发等完整服务,快速、轻松、低成本将任何Hadoop集群从试用阶段转移到生产阶段。
欢迎拨打慧都热线023-68661681或咨询慧都在线客服,我们有专业的大数据团队,为您提供免费大数据相关业务咨询!
发表评论