hbase是master-slave模型
一、client(客户端)
1、shell命令行接口
2、原生java api接口
3、thrift/rest api接口
4、mapreduce接口
用于批量数据导入和读取
二、zookeeper
1、实现master高可用
2、管理系统核心元数据
3、参与regionserver宕机恢复
4、实现分布式表锁
三、master
1、处理用户的各种管理请求
建表,修改表,权限操作,切分表,合并数据分片,以及compaction等
2、管理集群中所有的regionserver
regionserver负载均衡,regionserver宕机恢复,regionserver迁移
3、清理过期日志以及文件
master会每隔一段时间来检查hdfs中的hlog是否过期,hfile是否已经被删除。
四、regionserver
1、WAL(HLog)
(1)实现数据的高可靠,hbase数据随机写入时,并非直接写入hfile数据文件,而是先写入缓存,再异步刷新落盘,为了防止缓存数据丢失,数据写入缓存之前需要顺序写入HLog,当缓存数据丢失,仍然可以通过HLog日志恢复。
(2)实现Hbase集群间主从复制。通过回放主集群推送过来的HLog日志实现主从复制。
2、BlockCache
hbase系统中的读缓存,客户端从磁盘读取数据之后,通常会将数据缓存在系统的内存中,后续访问同一行数据可以直接从内存中获取而不需要再访问磁盘。BlockCache是一系列block块,一个block块默认为64k,由物理上相邻的多个KV数据组成。BlockCache同时利用了空间局部性和时间局部性。
(1)空间局部性
最近将读取的KV数据很可能与当前读取的KV数据在地址上是邻近的
(2)时间局部性
一个KV正在被访问,那么近期可能再次被访问
当前BlockCache主要有两个实现
(1)LRUBlockCache
(2)BucketCache(在GC上有优化)
五、region
数据表的一个分片,当数据表的大小超过一定的阈值,就会“水平切分”,分裂为两个region。region是集群负载的基本单位。通常一张表的region会分布在整个集群的多台regionserver上。一个region由一个或者多个store构成,store的个数取决于列簇的个数。多少个列簇就有多少个store。
六、store
hbase中,每个列簇的数据都集中在一起形成一个存储单元store。每个store由一个memstore和一个或者多个hfile组成,memstore称为写缓存,用户写入数据先写入memstore,当memstore写满(默认128M)后,系统会异步将数据flush成为一个hfile文件。当hfile文件超过一定的阈值后,系统将会compact操作,将这些小文件通过一定的策略合并成一个或者多个大文件。
七、HDFS
Hfile和HLog都是存储在hdfs中