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实例