数据模型
逻辑视图

- rowkey:行的主键,按字典序排序存储。rowkey为什么要排序?
- 列族(Column Family):行中的列被分为“列族”。一般的,存放在同一列族下的数据通常都属于同一类型(可以把同一个列族下的数据压缩在一起)
- 列键(Column Key):也称为列名,必须以列族作为前缀,格式为列族:限定词
- 时间戳(Timestamp):插入单元格时的时间戳,默认作为单元格的版本号。
存储单元格(Cell):在 HBase 中,值作为一个单元保存在单元格中。要定位一个单元,需要满足“行键+列键+时间戳”三个要素。
物理视图
HBase整体架构
HMaster
每台 Region Server 都会与 Master 进行通信,HMaster 的主要任务就是告诉 Region Server 它需要维护哪些 Region,具体功能如下:
管理用户对表的增删改查操作;
- 管理 Region Server 的负载均衡,动态调整 Region 分布;
- 在 Region 分裂后,负责新的 Region 的分配;
在 Region Server 停机后,负责失效 Region Server 上的 Region 的迁移;
Region Server
HBase读写流程
先去zk中访问META表,获得regoin与region server的关系
- Client缓存META表在本地,从META表中找到相应row key需要访问的Region Server
- Client的Put操作会将数据先写入WAL
- 当数据写入WAL,然后将数据拷贝到MemStore。 MemStore是内存空间,数据并 未写入磁盘
- 一旦数据成功拷贝到MemStore。 Client将收到ACK
- 当 MemStore中的数据达到阈值,数据会写入HFile
Compaction
HBase 的 MemStore 在满足阈值的情况下会将内存中的数据刷写成 HFile ,一个 MemStore 刷写就会形成一个 Hfile。随着时间的推移,同一个 Store 下的 HFile 会越来越多,文件太多会影响HBase查询性能,主要体现在查询数据的io次数增 加。为了优化查询性能,HBase会合并小的HFile以减少文件数量,这种合并HFile的操 作称为Compaction,这也是为什么要进行Compaction的主要原因。
Major Compaction和Minor Compaction
- Minor Compaction :会将邻近的若干个 HFile 合并,在合并过程中会清理 TTL 的 数据,但不会清理被删除的数据。
- Major Compaction:会将一个 store 下的所有 HFile 进行合并,并且会清理掉过 期的和被删除的数据,即在 Major Compaction 会删除全部需要删除的数据。值得 注意的是,一般情况下,Major Compaction时间会持续比较长,整个过程会消耗 大量系统资源,对上层业务有比较大的影响。因此,生产环境下通常关闭自动触发 Major Compaction功能,改为手动在业务低峰期触发
HBase调优
HBase读优化
HBase写优化
HBase高可用和容灾
HLog
HBase采用类LSM树的架构体系,数据写入并没有直接写入数据文件,而是会先写入缓 存(Memstore),在满足一定条件下缓存数据再会异步刷新到硬盘。
为了防止数据写入缓存之后不会因为Region Server进程发生异常导致数据丢失,在 写入缓存之前会首先将数据顺序写入HLog中。如果不幸一旦发生Region Server宕机, 这种设计可以从HLog中进行日志回放进行数据补救,保证数据不丢失。Region Server故障恢复
HMaster HA
zookeeper的watch机制
