HBase基础知识
一、HBase简介
HBase是Google BigTable的开源实现,并建立在Hadoop HDFS之上的数据库系统,能够对大型数据提供随机、实时的读写访问。HBase的目标是存储并处理大型的数据。HBase是一个开源的,分布式的,多版本的,面向列的存储模型,它存储的是松散型数据。
1.1、HBase与Google BigTable
|
BigTable |
HBase |
|
|
文件存储系统 |
GFS |
Hadoop HDFS |
|
海量数据处理 |
MapReduce |
Hadoop MapReduce |
|
协同服务管理 |
Chubby |
Zookeeper |
1.2、HBase特性
- 高可靠性
- 高效性
- 面向列
- 可伸缩
- 可在廉价PC Server搭建大规模结构化存储集群
1.3、HBase 数据表的特点
- 大:一个表可以有上亿行、上百列(列多时,插入变慢)
- 面向列:面向列族的存储和权限控制,列族独立检索
- 稀疏:对于为空的列,并不占用存储空间,因此,表可以设计的非常稀疏
- 每个Cell中的数据可以有多个版本,默认情况下版本号自动分配,是单元格插入时的时间戳
- HBase表中的数据都是字符串,没有类型
- 强一致性:同一行数据的读写只在同一台Region Server上进行
- 水平伸缩:Region的自动分裂以及Master的Balance;只用增加DataNode机器即可增加容量;只用增加Region Server机器即可增加读写吞吐量。
- 行事务:同一行的列的写入时原子的
- Column Oriented+三维有序
SortedMap(RowKey,ListSortedMap(Column,List(Value,TimeStamp))))
RowKey(ASC)+ColumnLabel(ASC)+Version(DESC)->Value
- 高性能随机写:WAL(Write Ahead Log)
二、HBase体系结构

2.1、结构说明
Client
- 使用HBase RPC机制与HMaster和HRegionServer进行通信
- Client与HMaster进行通信进行管理类操作
- Client与HRegionServer进行数据读写类操作
Zookeeper
- Zookeeper Quorum存储-ROOT-表地址、HMaster地址
- HRegionServer把自己以Ephedral方式注册到Zookeeper中,HMaster随时感知各个HRegionServer的健康状况
- Zookeeper避免HMaster单点问题
HMaster
HMaster没有单点问题,HBase中可以启动多个HMaster,通过Zookeeper的Master Election机制保证总有一个Master在运行。
主要负责Table和Region的管理工作:
- 管理用户对表的增删改查操作
- 管理HRegionServer的负载均衡,调整Region分布
- Region Split后,负责新Region的分布
- 在HRegionServer停机后,负责失效HRegionServer上Region迁移
HRegionServer
HBase中最核心的模块,主要负责响应用户I/O请求,向HDFS文件系统中读写数据。

HRegionServer管理一些列HRegion对象
- 每个HRegion对应Table中一个Region,HRegion由多个HStore组成;
- 每个HStore对应Table中一个Column Family的存储;
- Column Family就是一个集中的存储单元,故将具有相同IO特性的Column放在一个Column Family会更高效
HStore
HBase存储的核心。由MemStore和StoreFile组成。MemStore是Sorted Memory Buffer。
用户写入数据的流程:

1) Client写入数据存入MemStore;
2) MemStore满之后,进行Flush操作生成一个StoreFile;
3) StoreFile增长到一定阀值(64M),触发Compact合并操作(进行版本合并和数据删除),将多个(小)StoreFile合并成一个(大)StoreFile;
4) 单个StoreFile大小超过一定阈值(2G),触发Split操作,将当前Region Split成2个Region,(Old)Region会下线,新Split出的2个孩子Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。
由此过程可知,HBase只是增加数据,有所得更新和删除操作,都是在Compact阶段做的,所以,用户写操作只需要进入到内存即可立即返回,从而保证I/O高性能。
HLog
1) 引入HLog原因
在分布式系统环境中,无法避免系统出错或者宕机,一旦HRegionServer以外退出,MemStore中的内存数据就会丢失,引入HLog就是防止这种情况。
2) HLog的工作机制
每个HRegionServer中都会有一个HLog对象,HLog是一个实现Write Ahead Log的类,每次用户操作写入Memstore的同时,也会写一份数据到HLog文件,HLog文件定期会滚动出新,并删除旧的文件(已持久化到StoreFile中的数据)。当HRegionServer意外终止后,HMaster会通过Zookeeper感知,HMaster首先处理遗留的HLog文件,将不同Region的log数据拆分,分别放到相应Region目录下,然后再将失效的Region重新分配,领取到这些Region的HRegionServer在Load Region的过程中,会发现有历史HLog需要处理,因此会Replay HLog中的数据到MemStore中,然后Flush到StoreFiles,完成数据恢复。
浙公网安备 33010602011771号