HBase的各大组件
HBase 在hadoop生态圈中
HBase是什么,可以被用在哪里,解决什么样的问题?
Hbase是一种类似数据库的存储层,HBase适用于结构化的存储,并且是一个列式的分布式数据库,由当年的BigTable的论文而生。
数据在HBase中的排布逻辑上
Row-key | value(CF, Qualifiter, Version) |
---|---|
00001 | info{‘姓’: ‘张’,’名’:’三’} pwd{‘密码’: ‘111’} |
00002 | Info{‘姓’: ‘李’,’名’:’四’} pwd{‘密码’: ‘222’} |
数据模型
- Row-key:主键。
- Column Family: 列簇, info。是Region的一个物理存储单元。同一个Region下面的多个ColumnFamily,位于不同的路径下面。
- Column:属于某一个CF, familyName:column, 姓: 张。
- Cell:由{row key, cloumnFamily, version} 唯一确定的单元。(cell中的数据没有类型,全是字节码)
- Time Stamp:cell都保存着一份数据的多个版本,版本通过时间戳索引。每个cell中,不同的版本的数据按时间倒序排序,保证最新的数据在前面。
数据在HBase上的排布
Row-Key | CF:Colum-Key | 时间戳 | Cell Value |
---|---|---|---|
00001 | info:fn | 123456789 | 三 |
00001 | info:fn | 123456789 | 张 |
00002 | info:fn | 123456789 | 四 |
00002 | info:fn | 123456789 | 李 |
在 Hbase 中,Row-key 加上 CF 加上 Qulifier 再加上一个时间戳才可以定位到一个单元格数据(Hbase 中每个单元格默认有 3 个时间戳的版本数据)。
Hbase的表特征
HBase相关模块
Master
HMaster运行在namenode节点上
Hbase Master 协调多个Region Server,并监测他们之间的状态。 HMaster分配还负责分配Region 给 Region Server。
HMaster职责 *
- 管理用户对table的增、删、改、查操作
- 记录region在哪个region server上
- 在Region Split后,负责新的Region的分配
- 管理HRegion Server的负载均衡,调整Region分布
- HRegion Server宕机后, 负责失效HRegion Server上的Regions迁移
Master宕机,不影响RegionServer正在持行的工作。所以不存在单点故障(SPOF)。类似傀儡皇帝。
HMaster是所有metadata更改的接口。
Region Server
HRegionServer运行在datanode节点上
一个Region Server包含多个Region。Region Server的作用就只是管理表格,以及实现读写操作。
Client 连接 Region Server, 并通信获取HBase中的数据
- HRegion Server主要负责响应用户I/O请求,向HDFS文件系统中读写数据。
client
HBASE Client使用HBASE的RPC机制与HMaster和RegionServer进行通信。
- 管理类操作:Client与HMaster进行RPC
- Client 与HRegionServer进行RPC
Zookeeper
负责Region 和 Region Server的注册。 实现HMaster的HA
Hbase强依赖ZK
- 默认情况下, HBase管理ZK实例,如启动/停止ZK。实际上,一般是使用我们自己安装管理的ZK
- hmaster与hregionserver启动时会向zk注册
- zk引入例HMaster不再单点故障
Region
Region 是真实存放数据的地方。如果表非常大,并由多个CF组成,那么表的数据将放在多年Region之间, 每个Region中会关联多个存储单元。
- Region将数据表按Key横向划分为一个个子表,实现分布式存储
- Region是HBase分布式最基本单元
- Region分为元数据Region以及用户Region两类
- Meta Region记录了每一个User Region的路由信息
- 读写Region数据的路由,包括如下几步:
- 寻找Meta Region地址。
- 再由Meta Region寻找User Region地址
Cloumn Family
Hbase的工作机制
- client 访问HBase集群时,首先需要和zookeeper通信,找到对应的Region Server。
- Region是HBase的并行单元,数据都存在Region中。
- Region存储达到上限时(Threshold),Region会进行分裂,数据也会分裂到多个Region中。
- 每个Region包含多个store对象。
- 每个store中包含一个MemStore,和1个或多个HFile。
- MemStore 是数据在内存中的实体并且一般有序。当数据向Region写入时,会先写入到MemStore中。
- 当 MemStore 中的数据需要向hdfs倾倒(Dump)时(例如 MemStore 中的数据达到阈值),Store 便会创建 StoreFile,而 StoreFile 就是对 HFile 一层封装。
- MemStore 中的数据会最终写入到 HFile 中,也就是磁盘 IO。由于 HBase 底层依靠 HDFS,因此 HFile 都存储在 HDFS 之中。
写流程
- client 向 HRegionServer发送写请求
- HRegionServer将数据写到hlog(write ahead log)。为了数据的持久化和恢复。
- HRegionServer将数据写到内存
- 反馈client写成功
数据flush过程
- 当memstore数据达到阈值(默认是128M),将数据刷 到硬盘,将数据删除,同时删除HLog中的历史数据
- 并将数据存储到hdfs
- 在hlog中标记点
store数据合并过程
- 当数据块达到四个,hmster将数据块加载到本地,进行合并
- 当合并的数据超过256M,进行拆分,将拆分的Region分配给不同的HRegionServer管理
- 当HServer宕机后, 将HRegionServer的hlon拆分 ,然后分配不同的HRegionServer加载,修改.META
HBase如何保证数据可靠性
HBase 中的 HLog 机制是 WAL 的一种实现,而 WAL(一般翻译为预写日志)是事务机制中常见的一致性的实现方式。
每个 Region Server 中都会有一个 HLog 的实例,Region Server 会将更新操作(如 Put,Delete)先记录到 WAL(也就是 HLog)中,然后将其写入到 Store 的 MemStore,最终 MemStore 会将数据写入到持久化的 HFile 中(MemStore 到达配置的内存阀值)。