HBase架构设计与数据模型
Posted Hadoop技术学习
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HBase架构设计与数据模型相关的知识,希望对你有一定的参考价值。
HBase 设计与架构
HBase是一个分布式非关系型的数据库,参考了Google的BigTable模型而实现,通过Zookeeper来管理集群(Master的选举),使用HDFS作为底层存储。在架构设计上由HMaster和多个HRegionServer组成,设计图如下:
HBase架构设计图《摘自网络》
HBase模块 - Zookeeper
Zookeeper是分布式协调服务,提供了分布式锁,事件监听等服务,同时也充当着小型数据库的角色,
1.各个节点通过注册ZK中,然后往ZK发送⾃自⼰己的状态信息,然后HMaster通过ZK感知到各个节点的状态
2.ZK避免了HMaster单点的问题
HBase模块 - HMaster
1.HMaster是HBase的主节点,负责管理所有的RegionServer(比如:RegionServer维护了哪些region,RegionServer挂掉之后HMaster将其负责的所有Region状态设置为未分配状态,然后在将其分配到其它RegionServer中)
2.HMaster可以是多个(HMaster有主备操作),通过ZK的领导选举来运行一个HMaster其它Master处于休眠状态,提高了集群的可用性
3.HMaster负责管理Table的增删改查
4.负责所有Region的转移操作(1) 新表的Region分配 2) 运行时Region的均衡保证 3)RegionServer Failover之后其下⾯面的Region的转移工作)
HBase模块 - HRegionServer
1.从图中可以看出,HRegionServer是HBase的数据服务进程,处理⽤用户所有的读写请求
2.负责管理Region,处理对Region的IO请求
3.负责切分Region,如果Region的大小超出了⼀一定的阀值,那么将其切分为多个
4.RegionServer推荐管理1000个左右的Region
图RegionServer&Region
HBase模块 - HRegion
1.Region负责Rowkey数据的存储,在HBase数据表中按照RowKey的范围划为一个的Region,实现分布式的存储,每一个Region都关联一个Rowkey的范围(StartKey-EndKey)(可以参考HBase细节概要篇)
2.Region是Hbase的最小单元
3.Region分为Meta Region和User Region,Meta Region纪录了每一个User Region的路由信息,首先读写Region会⾸首先经过路由,1,寻找Meta Region 2,由Meta Region找到User Region
4.Region由多个Store组成
HBase模块 - Store
1.Store是HBase存储的核心,分两部分组成 MemStore和StoreFile
2.Store会有多个StoreFIle,StoreFile数据由MemStore区Flush进来
2.MemStore是一个数据缓冲区,HBase写入数据的时候,首先会写入到MemStore缓冲区中,当MemStore缓冲区足够大的时候,在Flush到StoreFIle中,当StoreFIle达到一定的阀值时,通过Compact操作,将多个StoreFIles合并成一个StoreFIle,同时会进⾏行版本合并和数据删除操作,如果StoreFIle足够大的时候,会出发Split操作,然后把当前的Region Split分两个Region,HMaster会将这两个Region分配到对应的RegionServer中,这样将一个大的Region的压⼒力分流到了两个Region中。
HBase模块 - MemStore
MemStore是一个缓存区,HBase写入数据的时候,只需将数据写入缓存区就可以了,当缓存区达到一定大小时(通过配置 hbase.hregion.memstore.flush.size ),将数据Flush到StoreFile中
HBase模块 - StoreFile
1.多个StoreFIle组成一个Region,当StoreFIles达到一定大小时(也就是Region达到一定大小时),会出发Split操作,然后把当前的Region Split分两个Region,HMaster会将这两个Region分配到对应的RegionServer中,这样将一个大的Region的压⼒力分流到了两个Region中。
2.StoreFile内部存储封装的是HFile
HBase模块 - HFile
1.HFile是HBase中KeyValue数据的存储格式,是Hadoop二进制格式文件
HBase模块 - HLog
1.HLog是HBase RegionServer的一种容错机制(具体的会在下文HBase容错机制中编写),每次在写入数据到MemStore的时候同时会写⼊入到HLog中
2.HLog本质是一个Hadoop Sequence File,HBase中WAL(write Ahead Log)的存储格式
HBase 数据模型
HBase是一个开源的非关系型的分布式数据库(NoSQL), 参考了Google的BigTable模型而实现,具有高可靠性,高性能,多维的,面向列/可伸缩的特点
HBase数据模型术语
Table(表)
一个HBase表包含多个行
Row(行)
在HBase里,row是由row key和一个或多个列及其值组成。数据在被存储的时候,是按row key的字母排序存储的。因此,row key的设计是非常重要的。这样存储数据的目的就是为了让相关的行存储在相邻的位置。一个常见的row key模式是一个网站的域名。如果你的row key是域名,你应该倒着存储他们(org.apache.www,org.apache.mail,org.apache.jira)。这种方式,使得所有的Apache域名在表中是相邻存储的,而不是基于子域名的首字母展开。
Column(列)
HBase的⼀一列由列簇和列修饰符组成,他们通常由冒号(:)分隔。
Column Family(列簇)
通常为了性能原因的考虑,列簇会把列和相应的值物理上联合在一起。每个列簇是一个存储属性的集合,例如它的值是否应该缓存在内存中,它的数据是如何压缩或它的row key是如何编码,以及其他。表中的每个行都有相同的列簇,但是一行也可能没有存储一个列簇里的任何数据。
Column Qualifier
列修饰符被加到一个列簇,以提供对一个数据片段的索引。规定一个列簇为content,一个列修饰符可能是content:html,另外一个可能是content:pdf。尽管列簇是在创建表的时候固定了,但列修饰符是可变的,在行之间可能存在很大的不同。
Cell
一个Cell是行,列簇和列修饰符的组合,并且包含一个值和时间戳,时间戳代表着值的版本。
Timestamp(时间戳)
一个时间戳是連同值一起被写入的,是值版本的唯一标识,默认情况下,时间戳表示数据写入时RegionServer的时间,但是当你在写数据到Cell的时候,你可以指定一个不同的时间戳。
参考资料
http://hbase.apache.org/
https://www.ibm.com/developerworks/cn/analytics/library/ba-cn-bigdata-hbase/index.html
加入技术讨论群
欢迎大家通过二维码打赏支持技术社区(二维码累计打赏30+,打赏英雄请留名,社区感谢您):
以上是关于HBase架构设计与数据模型的主要内容,如果未能解决你的问题,请参考以下文章