总结《HBase原理与实践》第一章
一、HBase体系结构
1. HBase 客户端
Hbase客户端访问数据行前,首先需要通过元数据表定位目标数据所在RegionServer,之后才会发送请求到该regionServer。同时这些元数据会被缓存在客户端本地,以方便后续的请求,如果该集群RegionServer发生宕机或者执行了负载均衡,从而导致数据分片发生迁移,客户端要重新请求最新的元数据并缓存本地。
2. zookeeper
- 实现Master高可用,一旦Active Master由于异常宕机,zookeeper会检测宕机事件,并选举出新的Master。
- 管理系统核心元数据:如,当前正常工作的RegionServer集合,保存元数据表hbase:meta表所在的RegionServer地址。
- 参与RegionServer宕机恢复,通过心跳机制检测RegionServer是否宕机,并通知Master进行宕机处理
- Master 和 Region的协调器
- 实现分布式表锁,因为hbase的表是分布式的,hbase对表进行管理操作(如 alter),防止其他用户也对同一张表进行操作,造成表状态不一致。
3. Master
- Master主要负责用户各种管理请求,如建表,修改表,权限操作,切分表,合并数据分片,compaction等。
- 管理集群中的RegionServer,包括RegionServer的负载均衡,RegionServer的宕机恢复以及Region的迁移。
- 清理过期日志和文件。检测HLog是否过期,并在过期后删除。
4. RegionServer
(1).WAL(HLog)
- 实现数据的高可靠性,数据并非直接写入HFile数据文件,而是先写入缓存,在异步刷写落盘,为防止缓存数据丢失,可以通过HLog日志恢复。
- 用于实现HBase集群间主从复制,通过回放主机群推送过来的HLog来实现主从复制
(2).BlockCache
Hbase的读缓存:客户端从磁盘读取数据后会将数据缓存到系统内存中,后续访问同一行数据直接从内存中就可以读取数据,尤其对于热点数据,带来极大的性能提升。
Hbase缓存对象是一系列Block块,一个块默认占64k,由物理相邻的多个KV数据组成。
BlockCache利用了空间局部性和时间局部性,前者表示最近将读取的KV数据,有可能与当前读取的k-v数据在地址上是相邻的,后者表示缓存的块,有可能被再次访问。
5. Region
数据表的一个分片,当数据表大小超过一定阈值就会水平切分,分裂为两个Region。Region是集群负载均衡的基本单位,一张表的region会分布在整个集群的多台RegionServer上,一个RegionServer会管理多个Region。
6. Store
一个Region由多个store组成,一个store对应一个列簇,建议将相同io特性的数据设置在同一个列簇中。
每个Store有1个MemStore和多个HFile组成。Memstore称为写缓存,默认128M,系统会异步的刷写数据flush成一个HFile文件,随着数据不断的写入,HFile文件越来越多,当HFile文件超过一定阈值,系统会执行Compact,将小文件通过一定策略合并成一个或多个大文件。
二、HBase系统特性
1. Hbase的优点
- 容量巨大:Hbase支持千亿行,百万列的数据规模。
- 良好的扩展性:Hbase集群可以非常方便实现集群容量扩展,存储节点的扩展以及读写服务节点扩展。
- 稀疏性:Hbase支持大量稀疏存储,对于空值列,不需要占用额外空间。
- 多版本:HBase支持多版本特性。
- 支持过期:Hbase支持TTL过期特性,用户设置过期时间,自动删除。
2. Hbase的缺点
- Hbase本省不支持复杂的聚合运算(join,GroupBy等)如果业务中需要使用聚合运算,可以在HBase之上架设Phoenix组件或者Spark组件
- 本身并没有实现二级索引功能,普遍使用Phoenix提供的二级索引功能。
- HBase原生不支持全局跨行事务,只支持单行事务模型。同样,可以使用Phoenix提供的全局事务模型组件来弥补HBase的这个缺陷。