HBase简介

简介

HBase是一个分布式的、面向列的开源数据库。

特点

海量存储、列式存储、极易扩展、高并发、稀疏。

组成

HBase简介
HBase是由Client、Zookeeper、HMaster、HRegionServer、HDFS等几个组件组成。

Client包含了访问HBase的接口。
HBase通过Zookeeper来做HMaster的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作。
Hbase的元数据是自身管理的,Zookeeper知道哪个Regionserver存放在了meta表。
HMaster为RegionServer分配Region,维护整个集群的负载均衡 ,维护集群的元数据信息,发现失效的Region,并将失效的Region分配到正常的RegionServer上,当RegionSever失效的时候,协调对应Hlog的拆分。
HRegionServer管理master为其分配的Region,处理来自客户端的读写请求,负责和底层HDFS的交互,存储数据到HDFS,负责Region变大以后的拆分,负责Storefile的合并工作。
HDFS为HBase提供最终的底层数据存储服务,同时为HBase提供高可用(Hlog存在HDFS)

HMaster作用

1.监控RegionServer
2.处理RegionServer故障转移
3.处理元数据的变更
4.处理region的分配或转移
5.在空闲时间进行数据的负载均衡
6.通过Zookeeper发布元数据的位置(meta表)给客户端

HRegionServer作用

1.负责存储HBase的实际数据
2.处理分配给它的Region
3.刷新缓存到HDFS
4.维护Hlog(每个regionserver都有一个Hlog)
5.执行压缩
6.负责处理Region分片(自动分片)

其他组件作用

1.Write-Ahead logs(WAL,HLOG&edits日志)
HBase的修改记录,当对HBase读写数据的时候,数据不是直接写进磁盘,它会在内存中保留一段时间(时间以及数据量阈值可以设定)。但把数据保存在内存中可能有更高的概率引起数据丢失,为了解决这个问题,数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
2.Region
HBase表的分片,HBase表会根据RowKey值被切分成不同的Region存储在RegionServer中,在一个RegionServer中可以有多个不同的Region。
3.Store
HFile存储在Store中,一个Store对应HBase表中的一个列族。
4.MemStore
顾名思义,就是内存存储,位于内存中,用来保存当前的数据操作,所以当数据保存在WAL中之后,RegsionServer会在内存中存储键值对。
5.HFile
这是在磁盘上保存原始数据的实际的物理文件,是实际的存储文件。StoreFile是以HFile的形式存储在HDFS的。
6.storeFile
HFile是Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile

原理

HBase原理之读流程

HBase简介
1.Client先访问Zookeeper,得到存储元数据Region的位置,读取meta表中的数据;
2.根据namespace、表名和rowkey在meta表中找到对应的Region信息;
3.找到这个Region对应的Regionserver;
4.查找对应的Region;
5.先从MemStore找数据,如果没有,再到BlockCache里面读;
6.BlockCache还没有,再到StoreFile上读(为了读取的效率);
7.如果是从StoreFile里面读取的数据,不是直接返回给客户端,而是先写入BlockCache,再返回给客户端。

HBase原理之写流程

HBase简介
1.Client向HRegionServer发送写请求;
2.HRegionServer将数据写到HLog(write ahead log)。为了数据的持久化和恢复;
3.HRegionServer将数据写到内存(MemStore);
4.反馈Client写成功。

HBase原理之数据Flush流程

1.当MemStore数据达到阈值(默认是128M,老版本是64M),将数据刷到硬盘,将内存中的数据删除,同时删除HLog中的历史数据;
hbase.hregion.memstore.flush.size: 针对Region级别,当一个Region内的所有memstore总大小达到该阈值的时候,所有的MemStore都会溢写到磁盘文件
hbase.regionserver.global.memstore.size:针对Regionserver级别,当一个Regionserver内的所有MemStore总大小达到该阈值的时候,当前Regionserver内的所有store的memstore全部flush
2.并将数据存储到HDFS中;

HBase原理之数据合并流程

1.当数据块达到4块(一个Store中的Hfile),HMaster将数据块加载到本地,进行合并;
2.当合并的数据(Store数据)超过256M,HregionServer将Region进行拆分,HMaster将拆分后的Region分配给不同的HRegionServer管理(一个Store列族数据超过256m会对整个Region进行切分,此处可以预分区);
3.当HRegionServer宕机后,HMaster将该HRegionServer对应的HLog拆分,然后分配给不同的HRegionServer加载,修改.META.;
4.HLog会同步到HDFS。(MemStore在一个Server上也会有很多,所以HLog丢失会不安全)