程序员

HBase原理总结

2018-08-27  本文已影响73人  北邮郭大宝

在总结Spark读写HBase的同时,也顺便学习了一下HBase的原理,同样做个简单的记录。事实上,相关的总结网上超级多,写的已经很到位了。本文一些内容会直接摘取相关参考资料,对原文作者表示感谢。

我自己觉得学习大数据原理时最麻烦的就是逻辑概念和物理概念的交叉混叠。每一套组件里都涉及到很多新的专有名词,很容易就搞混弄乱。学习过程中最重要的还是集中注意力,参考多份资料,仔细反复阅读,效果会好些。

1.HBase简介

HBase是Hadoop生态圈中的非关系型数据库,其最大的特点是面向列存储、可以实现在超大规模数据集上的实时读写和随机访问,可以说是对HDFS的有益补充。

传统的行存储是将完整的数据行存储在磁盘中,查询时会读取该行的所有数据列。但有些应用场景,只需要一小部分数据列,这种方式就很浪费IO。

列存储就是将同一个数据列的各个值存放在一起,也就是说插入某行数据时,该行的各个数据列的值会存放到不同的地方。好处就是需要某几列数据时,可以很方便读取。

2.HBase数据模型

HBase同数据库一样,也是以表的形式存储数据。表由行和列构成,若干列可以组成一个列族(Column family)。

2.1 HBase逻辑数据模型

hbase1.jpg

基本概念:
- RowKey:每条记录的“主键”
- Column Family:列族,包含一个或者多个相关列,列族是表的Schema的一部分
- Column:属于某一个columnfamily,即familyName:columnName,每条记录在同一个列族中可以由不同的列组成
- Version Number:版本,类型为Long,默认值是系统时间戳timestamp,也可由用户自定义
- Value:值

2.2 HBase物理数据模型

hbase2.jpg

3.HBase体系架构

hbase3.jpg

从架构上看,HBase由client、Zookeeper、HMaster、HRegionServer、HRegion、Store、MemStore、StoreFile、HFile、HLog等构成。

以上是宏观上HBase的体系架构,下面就是更细节的信息,主要是对Region的剖析。

hbase4.jpg hbase5.jpg

HBase基本体系架构就是这样,从宏观上理解:Client作为API接口,访问HBase;Master是整个集群的大脑,负责维护RegionServer;RegionServer管理若干个Region,并实现与Client的数据通信;Region是逻辑上分布式存储和负载均衡的最小单元;Zookeeper实现对集群的监护和HA。

从微观上理解Region,一个table会至少有一个Region,随着数据量的增大,Region实现分裂。Region内部由多个Store构成,每个Store存储一个列族。Store又由MemStore、StoreFile构成,MemStore内存写到一定程度后落磁盘到StoreFile。

4.Region寻址

hbase6.jpg

HBase通过三级索引结果实现Region的寻址。我们逆序描述这个设计的思路,HBase的所有数据Region元数据被存储在.META.表中,但是随着Region增多,显然.META.会越大越大,最终也会分裂成多个Region;-ROOT-表实现定位.META.表的Region的位置,保存.META.表中所有Region的元数据。而且-ROOT-不会分裂,只有一个region。Zookeeper会记录-ROOT-表的位置信息。

我们在正序描述寻址过程,Client通过ZK找到-ROOT-表的位置,通过-ROOT-表查找到.META.的位置,再从.META.查找用户Region的位置。可以实现最多三次跳转就可以定位任意一个Region的效果。为了加快访问速度,.META.表的所有Region全部保存在内存中。客户端会将查询过的位置信息缓存起来,且缓存不会主动失效。

5.HBase读写过程

这部分直接拿来了参考文章的截图,写的已经很简单清晰了。

hbase7.jpg

5.1 读过程

5.2 写过程

6.HBase的HA

7.参考

上一篇下一篇

猜你喜欢

热点阅读