您的位置:首页 > 其它

Hbase 基础理论

2017-02-12 12:45 561 查看
HBase 基础理论
Hbase 数据模型


列族

列限定符

时间戳

表概念视图

表物理视图

列存储与行存储模式的区别

Hbase实现原理
Master与Region

Region服务器工作原理

HBase 基础理论

Hbase是一个分布式的列数据库,适用于分布式大数据场景。Hbase本身是属于NoSQL在hadoop的大数据集群框架中可以用来做数据的存储。Hbase本身是Google的Bigtable理论的开源实现。本篇文章主要是记录Hbase的一些理论学习的心得,为后续的项目实战练习铺垫

Hbase 数据模型

Hbase可以被描述为稀疏的,多维度排序映射表,采用行键,列族,列限定符以及时间戳来进行数据的索引

Hbase同样的引入了表这一概念来存储数据,列构成列族组成表。表中存储的数据都是字节数组,没有数据类型的概念,因此需要客户端程序对数据进行解析。

列族

列族是Hbase中的控制访问的基本单元,它由列组成。列族必须在表定义的时候进行制定,列族中列信息并未严格的限定,

列限定符

列限定符可以认为是列族中用于确定单元格的标识,列限定符并不需要在定义表结构的时候定义,本身无类型限定,存储的时候以字节数组的方式存储。具有一定的扩展性。

时间戳

时间戳是一个64位的整数,当对表中单元格进行变动(增加删除以及更新)时,都需要时间戳来对新版本的数据进行标识。时间戳用于确定单元格数据的版本。

有了以上四个属性构成的思维坐标(行健,列族,列限定符,时间戳)可以唯一确定Hbase表中单元格的数据。因此也可以把Hbase看成一个键值对的数据库。

表概念视图

如下图所示的一个简单的Hbase表概念试图

行健时间戳列族contents列族counts
aaa.bbbT1contents:a=”hello”
aaa.bbbT2contents:b=”world”
aaa.bbbT3counts:a=”5”
aaa.bbbT4counts:b=”6”
上图所示同一个行健对应四个不同时间戳的数据。

表物理视图

Hbase本身是列存储数据库,物理试图与概念视图有出入,物理视图将按照列列族进行分割,相同列族的行数据划分到一个片段中。所以实际的物理视图如下

行健时间戳列族contents
aaa.bbbT1contents:a=”hello”
aaa.bbbT2contents:b=”world”
counts列族

行健时间戳列族counts
aaa.bbbT3counts:a=”5”
aaa.bbbT4counts:b=”6”
相比于概念视图,可以看出物理视图中是将每一列族数据和时间戳以及行健一起存储的。并且列族中的空数据是不会进行存储。

列存储与行存储模式的区别

行存储模式NSM(N-ary storage model)是传统的数据库采用的存储模型,将每一行元素(元祖)连续的写入到磁盘页中。当进行查询时会扫描整个磁盘,获取完整的元祖,再筛选出其中的查询属性返回。这样使得无用的I/O开销较大。而列式存储模型DSM(decomposition storage model)是将属性列数据进行连续的写入到磁盘,当进行查询的时候,只有相关的属性列会被访问,而不是返回整个元祖。不同元祖的相同属性列会被连续的写入到磁盘页中,一个完整的元祖数据存在于不同的磁盘页中。使用DSM可以减小无用的I/O开销,可以提高查询的速度。

Hbase实现原理

Master与Region

采用比较传统的Master/Slave结构。Master服务器主要负责管理与维护Hbase表的分区。决定哪个region到相关的region服务器。负责Region服务器的负载均衡。另外一个作用是维护Region服务器,负责处理Region服务器的故障转移。Region服务器主要是负责管理自身的Region表数据。一个集群中的Region服务器具有较多的Region数据。Master服务器负责每一个Region存放的位置。每一个Region数据存放时会生成一个映射数据表,Region标识符(Region服务器名称_起始的行号_regionid)与Region服务器地址的映射表。这个表即是元数据表.META.数据。每一个region都有这样一行映射的数据。当集群中存放Region数据增多时,.META.文件的数据量会越来越大,因此.META.表也会被划分成多张表,表的元数据会被-ROOT-表存储。整个系统中只有一个-ROOT-表,并且只有一个Region负责存放-ROOT-。系统采用类B+树的三级结构用于存放Region数据位置。

层次名称内容
第一层ZK文件记录-ROOT-表位置
第二层-ROOT-表记录.META.文件位置
第三层.META.文件记录Region数据的存放位置
通过三层结构可以实现Region数据的寻址。寻址具有一定的开销,因此在客户端设计过程中需要缓存对Region数据地址进行存储

Region服务器工作原理

一个Region服务器负责管理机器中的所有的Region数据。Region服务器中含有多个Region对象以及一个Hlog日志文件。所有的Region对象共用一个日志文件。共用日志文件的优势是所有的region操作历史信息直接在log文件中append即可。与分开记录最大的区别在于减小了磁盘寻址以及同时打开多个文件的较大开销。一个Region对象里面含有多个Store。每一个Store代表一个列族。Store下面存在MemStore以及多个StoreFile。StoreFile存在于文件系统中(HFILE基于HDFS)。MemStore 是一个缓存。系统定期将缓存中的数据刷入到磁盘。StoreFile最初为比较小的文件,当磁盘中storefile文件数量增大时会采取合并的方式将小的 StoreFile合并为大的StoreFile。如果一个StoreFile超过阈值,那么会分裂出新的StoreFile 同时分裂出两个子Region替换掉原有的Region。然后Master重新分发到其他Region服务器上。当Region服务器出现故障时。Master会将故障服务器的Hlog进行拆分,分解到响应的Region数据。然后分发到不同的Region服务器中。拆分过程需要较大的开销。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: