Ø
Client
HBase Client
使用
HBase
的
RPC
机制与
HMaster
和
HRegionServer
进行通信,对于管理类操作,
Client
与
HMaster
进行
RPC
;对于数据读写类操作,
Client
与
HRegionServer
进行
RPC
Ø
Zookeeper
Zookeeper Quorum
中除了存储了
-ROOT-
表的地址和
HMaster
的地址,
HRegionServer
也会把自己以
Ephemeral
方式注册到
Zookeeper
中,使得
HMaster
可以随时感知到各个
HRegionServer
的健康状态。此外,
Zookeeper
也避免了
HMaster
的单点问题。
Ø
Hmaster
HMaster
没有单点问题,
HBase
中可以启动多个
HMaster
,通过
Zookeeper
的
Master Election
机制保证总有一个
Master
运行。
HMaster
在功能上主要负责
Table
和
Region
的管理工作:
1.
管理用户对
Table
的增、删、改、查操作
2.
管理
HRegionServer
的负载均衡,调整
Region
分布
3.
在
Region Split
后,负责新
Region
的分配
4.
在
HRegionServer
停机后,负责失效
HRegionServer
上的
Regions
迁移
ØHRegionServer
主要负责响应用户
I/O
请求,向
HDFS
文件系统中读写数据,是
HBase
中最核心的模块。
ØHRegionServer
内部管理了一系列
HRegion
对象,每个
HRegion
对应了
Table
中的一个
Region
,
HRegion
中由多个
HStore
组成。每个
HStore
对应了
Table
中的一个
Column Family
的存储,可以看出每个
Column Family
其实就是一个集中的存储单元,因此最好将具备共同
IO
特性的
column
放在一个
Column Family
中,这样最高效。
ØHStore
存储是
HBase
存储的核心了,其中由两部分组成,一部分是
MemStore
,一部分是
StoreFiles
。
ØMemStore
是
Sorted Memory Buffer
,用户写入的数据首先会放入
MemStore
,当
MemStore
满了以后会
Flush
成一个
StoreFile
(底层实现是
HFile
)
Ø
当
StoreFile
文件数量增长到一定阈值,会触发
Compact
合并操作,将多个
StoreFiles
合并成一个
StoreFile
,合并过程中会进行版本合并和数据删除,因此可以看出
HBase
其实只有增加数据,所有的更新和删除操作都是在后续的
compact
过程中进行的,这使得用户的写操作只要进入内存中就可以立即返回,保证了
HBase I/O
的高性能。
Ø
当
StoreFiles Compact
后,会逐步形成越来越大的
StoreFile
,当单个
StoreFile
大小超过一定阈值后,会触发
Split
操作,同时把当前
Region Split
成
2
个
Region
,父
Region
会下线,新
Split
出的
2
个孩子
Region
会被
HMaster
分配到相应的
HRegionServer
上,使得原先
1
个
Region
的压力得以分流到
2
个
Region
上。
Ø
下图描述了
Compaction
和
Split
的过程。