2.4.1 存储层
存储层主要用于存储信息资源。在云计算环境下可用于信息资源的技术和产品有很多种。本平台推荐采用如下技术和产品。
(1)HDFS或HCFS是Hadoop生态系统中数据存储管理的基础。早期的HDFS是按照GFS(Google File System,Google文件系统)的思想设计的,因此,HDFS通常被认为是GFS的开源版本。但是,二者并不是完全相同的,例如HDFS不支持GFS的快照(snapshot)、记录追加操作、惰性垃圾回收策略等。HDFS的主要特征如下:
•支持超大文件。HDFS的设计是面向大文件(TB级,甚至PB级)的存储能力,因此,HDFS对大文件的处理能力较强;但是对小文件,尤其是大量的小文件的处理能力却较弱。默认情况下,HDFS将文件分割成若干个数据块(block),每个数据块的大小为64MB,将数据块按键值对形式存储,并将键值对的映射保存到内存之中。当小文件太多时,HDFS会增加内存的负荷。
•基于商用硬件。HDFS的设计是面向廉价的、可靠性不高的普通商用硬件,而不是昂贵的高可靠性硬件。因此,HDFS保存多个副本,具备较强的硬件容错能力。
•流式数据访问。HDFS的设计以“一次写入、多次读取”为主要应用场景,因此,HDFS适用于批量流式处理数据,而不太适合随机定位访问。
•高吞吐量。HDFS的设计中重视数据的高吞吐量,因此其数据吞吐量高,然而也造成了其数据延迟访问的特征。
(2)HBase。HBase是由Fay Chang等采用Google的Bigtable技术开发出的开源系统。HBase在Hadoop之上提供了类似于Bigtable的数据管理功能。HBase也是Apache的Hadoop项目的子项目,如图2-13所示。从图2-13可以看出,HBase在Hadoop项目中的MapReduce计算层和HDFS存储层之间,提供了二者之间的分布式数据管理功能。
图2-13 HBase与Hadoop项目
与传统关系数据库不同的是,HBase是非结构化的、多版本的、面向列的、开源的数据库。从逻辑上看,HBase就像一张列式存储的关系表:
•索引为行关键字、列关键字和时间戳。
•数据列可以根据需要动态增加,同一张表中的每行数据可以含有不同的列。列名字的格式是<family>:<qualifier>(<列簇>:<限定符>),都由字符串组成。
•数据单元的内容可以有带不同时间戳的多个版本。
•数据表往往是稀疏矩阵,空列并不占用存储空间。
•数据都是字符串,没有类型。