HBase架构理解

Hbase架构

HBase架构理解ps:图中错误,hlog存在hregionserver下,每个hregion有对应的部分

Hmaster:管理多个HRegionServer
HRegionServer :包含Hlog:预写日志文件(先存入日志文件)和多个HRegion
HRegion:包含多个Stroe
Stroe:包含MemStroe和多个StroeFile
StroeFile -> HFile(MemStore溢写保存为持久化文件,保存在HDFS上)

特殊概念

列簇

hbase表中的每个列,都归属与某个列簇。
列簇是表的chema的一部分(而列不是),必须在使用表之前定义。
列名都以列簇作为前缀。例如courses:history , courses:math 都属于 courses 这个列簇。

时间戳

HBase中通过row和columns确定的为一个存贮单元称为cell。每个 cell都保存着同一份数据的多个版本,版本通过时间戳来索引。每个 cell中,不同版本的数据按照时间倒序排序,即最新的数据排在最前面。

Cell

{row key, column( =<family> + <label>), version} 唯一确定的单元。cell中的数据是没有类型的,全部是字节码形式存贮。

HBase读写

获取meta元数据表(zookeeper请求meta表相应的regionserver,获取meta元数据表(meta中保存的信息有:hdfs中一共保存了多少个表;每一个表包含有多少个region;每一个表的rowkey的范围))->
通过meta元数据表根据rowkey请求对应的regionserver响应->
根据表名+rowkey查找所在region->
数据读取步骤:
根据cloumn family 查找所属的store
先读取memstore内存缓存的数据,再读取storefile(持久化数据,保存在hdfs上)
数据写入步骤:
写入数据到memstore内存,同时数据写入到Hlog文件中,当内存达到阈值,写入到storefile文件中,保存在hdfs上。

HBase容错机制

数据的容错:

每个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,完成数据恢复

Master容错:

Master宕机,Zookeeper重新选择一个新的Master ;

RegionServer容错:

定时向Zookeeper汇报心跳,如果一旦时间内未出现心跳,Master将该RegionServer上的Region重新分配到其他RegionServer上,失效服务器上“预写”日志由主服务器进行分割并派送给新的RegionServer

Zookeeper容错:

Zookeeper一般配置3或5个Zookeeper实例