大数据入门:Hbase存储原理解析

2020-12-03 18:06:22 浏览数 (1)

在大数据储存任务当中,针对于具备“5V”特征的大规模数据集,数据存储从传统的关系型数据库开始转向非关系型数据库(NOSQL),而NOSQL数据库当中,Hbase无疑是非常经典的一个作品。今天的大数据入门分享,我们就来讲讲Hbase存储原理。

Hbase生于Hadoop生态,与Hadoop生态紧密相关,而Hbase要完成存储,也需要依赖于Hadoop生态当中的其他组件,比如HDFS分布式文件系统、Zookeeper分布式协调服务等。

要了解Hbase的存储原理,我们先从Hbase的数据结构开始讲起。

Hbase的数据结构

Hbase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳。

1、Rowkey

Rowkey是用来检索记录的主键,访问Hbase table中的行,数据会按照Rowkey的字典序排序进行存储,利用这个特性,把经常一起读取的行存储在一起。

2、Column Family

列族,Hbase表中的每个列,都会属于某个列族,列族是表的结构的一部分,列族在建表的时候必须要指定。列名都是以列族做为前缀。在创建表的时候需要指定列族,列族可以指定多个。

3、Cell

由Rowkey,column Family:column,version唯一确定的单元,cell中的数据是没有类型的,全部都是字节的形式存储

4、Time Stamp

时间戳,每个cell都保存着同一份数据的多个版本,版本通过时间戳来索引。时间戳可以由系统生成,也可以自己指定。每个cell中,不同版本的数据按照时间倒序排列,即最新的数据在最前面,通过时间戳不同来确定版本的。

Hbase存储模型

在Hbase当中,Region是HBase分布式存储的基本单位,其本质上是一种水平切分单位,可以理解为数据的分片;而Column Family(列族)则是垂直切分的单位,可理解为一种列的分组。

具体来说——

一个Region包含多个Store,一个store对应一个CF;

Store包括位于内存中的Memstore和多个持久化的Storefile;

写操作先写入Memstore,当Memstore中的数据大小达到某个阈值后会Flush到一个单独的Storefile;

当Storefile文件的数量增长到一定阈值后,系统会进行合并,形成更大的Storefile(Compaction);

当一个Region所有Storefile的大小总和超过一定阈值后,会把当前的Region分割为两个(分裂);

Master自动检测RegionServer上Region的分配情况,自动进行均衡迁移;

客户端检索数据,优先从Memstore查询,然后再查询Storefile。

Hbase存储原理

HBase在存储上是基于LSM树实现的,与传统的B/B 树原理不同的是,LSM树非常适用于写入要求非常高的场景。

LSM的原理,就是将一个大的B(B )树拆分成N棵小树,数据首先写入内存中(有序),随着数据写入越来越多,内存中的数据会被flush到磁盘中形成一个文件;在读取数据时,则需要合并磁盘中历史数据和内存中最近修改的操作后返回。

由于数据是顺序写入的,因此LSM的写入性能非常高,但读取时可能会访问较多的磁盘文件,性能较差。为了缓解读性能低下的问题,LSM树会定时将磁盘中的多个文件(小树)进行合并,以优化读性能。

在HBase的实现中,内存中的数据则是对应于MemStore,而磁盘中的数据则对应于StoreFile(HFile实现)。当MemStore写满后会Flush到一个HFile中。随着HFile文件的不断增多,Region的读性能就会受到影响(IOPS增加)。因此HBase的Region Server会定期进行Compaction操作,将多个HFile合并为一个大的有序的HFile。HBase中运行的Compaction动作有两种:

Minor Compaction,列族中小范围的HFile文件合并,一般较快,占用IO低;

Major Compaction,列族中所有的HFile文件合并,同时清理TTL过期以及延迟删除的数据,该过程会产生大量IO操作,性能影响较大。

关于大数据入门,Hbase存储原理解析,以上就为大家做了基本的介绍了。Hbase在大数据生态当中,尤其是数据存储环节,重要程度非常高,也建议大家去深入地理解和掌握。

0 人点赞