HBase
程序员文章站
2022-07-03 09:10:47
简介 HBase是面向列的分布式存储系统(NoSQL数据库),是对Google论文BigTable的实现,具有数据存储量大、高性能、高扩展等特点。(BigTable是对HBase最形象的解释,大宽表,支持百万级列、亿万级数据,动态列)数据模型......
简介
HBase是面向列的分布式存储系统(NoSQL数据库),是对Google论文BigTable的实现,具有数据存储量大、高性能、高扩展等特点。(BigTable是对HBase最形象的解释,大宽表,支持百万级列、亿万级数据,动态列)
数据模型
HBase数据模型可以分为逻辑结构和物理结构。逻辑结构上,HBase的表由多行记录组成,每行由多个列簇组成,每个列簇由多个列组成;物理结构上,每张表按照RowKey被水平拆分成多个Region,每个Region按照Column Family被垂直拆分成多个Store(面向列存储的原因),每个单元格的数据由多个版本,按照KV存储,如下图所示:
- RowKey:唯一表示一行记录;
- Column Qualifier:创建表时只需要指定RowKey和Column Family,列是动态的,按需指定;
- Cell:<RowKey, Column Family, Column Qualifier>唯一确定的单元,每个单元格有多个版本,并且可以设置过期时间TTL;
- TimeStamp:用于标识数据的不同版本,每条数据写入时可以指定数据版本,如果不指定默认使用系统当前时间;
- Region:每个Region由多个Store组成,每个Store对应一个列簇;
系统架构
HBase的架构为主从架构,HMaster为管理节点,负责元信息和集群管理;HRegionServer为数据节点,负责数据的管理,数据最终存储在HDFS上,如下图所示:
HMaster职责:
- HRegionServer节点管理(监控、Region分配和负载均衡等);
- 表元信息管理(DML相关),实际数据仍存储在HRegionServer;
HRegionServer职责:
- Region管理(拆分、压缩);
- 客户端数据读写请求处理(DDL相关);
Zookeeper职责:
- HMaster高可用(集群选主);
- 集群监控:HRegionServer的监控,上下线信息通报给HMaster;
- 元信息管理:Region路由信息、表元信息,以及集群配置信息等;
数据读写流程
Region寻址
- Client首先请求ZK,获取HBase的Meta表所在的HRegionServer;
- Client连接HRegionServer,获取Meta表信息,确定RowKey所属的Region,以及Region所在的HRegionServer;
写流程
- 通过Region寻址,Client连接至对应的HRegionServer;
- 先将写命令写入HLog日志,然后将更新写入MemStore内存,写入成功后返回ACK到Client;
- 如果MemStore的大小超过设定阈值,刷盘到StoreFile;
读流程
- 通过Region寻址,Client连接至对应的HRegionServer;
- 先从BlockCache(HRegionServer全局缓存,LRU算法)中查找数据,如果存在则返回;
- 如果不存在,则从RowKey所属的Region中的MemStore和StoreFile查找;
拆分与合并
Region拆分
- 拆分原因: 单个Region的数据越来越多,会导致数据读取RT升高;
- 拆分时机: Region中某个Store的数据量(所有StoreFile之和)超过设定阈值时触发拆分;
-
拆分过程: 一个Region被拆分成两个,如果有负载均衡的需要,某个Region会被移到其他HRegionServer;
StoreFile合并
- 合并原因: StoreFile过多会导致数据读取RT升高;
- 合并方式: 合并分为Minor Compaction和Major Compaction。Minor Compaction会将临近的若干个小文件合并成一个大文件,会清理过期数据,但是不会清理已删除数据;Major Compaction将Store下所有的文件合并成一个大文件,并且会清理和已删除数据。
比较
对比关系型数据库: HBase能够支持海量数据的存储,并且容易扩展,但是不支持事务,二级索引,以及复杂查询;
对比Hive: 虽然都是基于HDFS,HBase是存储系统,提供低延迟的读写,用于在线业务;Hive是分析系统,用于大数据的离线分析;
应用场景
HBase作为分布式数据库,适用于海量数据存储(至少亿级别的数据量)场景(没有事务、复杂SQL等需求)。
参考
本文地址:https://blog.csdn.net/yangguosb/article/details/107497932
上一篇: 数据同步问题解析