Hbase的架构
Hbase特点
- 海量存储
- 列式存储:列族存储,列族在创建表的时候必须指定
- 极易扩展:一是基于上层处理能力(RegionServer)的扩展,一个是基于存储的扩展(HDFS),
通过横向添加RegionServer的机器,水平扩展,提升Hbase上层的处理能力;横向添加DataNode的机器,进行存储层扩容,提升Hbase的数据存储能力和后端存储的读写能力 - 高并发:Hbase的单个IO延迟下降并不多,能获得高并发,低延迟的服务
- 稀疏:在列族中,可以指定任意多的列,在列数据为空时,不会占用存储空间
Hbase的组件
- Client:Client包含了访问Hbase的接口,另外Client还维护了对应的cache来加速Hbase的访问,比如cache的.META.元数据的信息
- Zookeeper:HBase通过Zookeeper来做master的高可用、RegionServer的监控、元数据的入口以及集群配置的维护等工作
通过Zoopkeeper来保证集群中只有1个master在运行,如果master异常,会通过竞争机制产生新的master提供服务
通过Zoopkeeper来监控RegionServer的状态,当RegionSevrer有异常的时候,通过回调的形式通知Master RegionServer上下线的信息
通过Zoopkeeper存储元数据的统一入口地址 - Hmaster:
为RegionServer分配Region
维护整个集群的负载均衡
维护集群的元数据信息
发现失效的RegionServer,并将失效的Region分配到 正常的RegionServer上
当RegionSever失效的时候,协调对应Hlog的拆分 - HregionServer
管理master为其分配的Region
处理来自客户端的读写请求
负责和底层HDFS的交互,存储数据到HDFS
负责Region变大以后的拆分
负责Storefile的合并工作 - HDFS:提供元数据和表数据的底层分布式存储服务
其余组件
- Write-Ahead logs:数据会先写在一个叫做Write-Ahead logfile的文件中,然后再写入内存中。所以在系统出现故障的时候,数据可以通过这个日志文件重建。
- Region:Hbase根据Rowkey的不同划分成不同的region存储在regionServer中,一个regionServer可有多个不同的region
- Store:Hfile存储在store中,一个store对应Hbase表的一个列族
- MemStore:内存存储,保存当前的数据操作,当数据保存在WAL中后,RS会在内存中存储键值对
- Hfile:在磁盘上保存原始数据的实际的物理文件,是实际的存储文件,StoreFile是以Hfile的形式存储在HDFS上。
HBase数据存取流程
-
数据存储
-
1、客户端Client:
-
请求Zookeeper,确定 MetaTable所在RegionServer的地址
-
在根据RowKey找到归属的RegionServer
-
HBase Client Put(Delete)数据,提交到RegionServer
-
2、服务端Hbase server
-
Region Server 去获取行锁,Region更新共享锁
-
写HLog,WAL
-
写缓存,MemStore
-
将日志同步到HDFS
-
写满缓存后,启动异步线程将数据写入到硬盘上
-
可能触发Compaction或拆分
put 提交之后,数据首先会放入 MemStore,然后再写 WAL (Write Ahead Log),当 MemStore 满了之后就会往 StoreFile 里面刷( HBase 并不会直接将数据落盘,而是先写入缓存,等缓存满足一定大小之后再落盘。)。当 StoreFile 文件数量增长到一定阈值之后,会触发Compact合并操作,将多个 StoreFiles 合并成一个 StoreFile
-
-
数据获取
客户端:- 请求Zookeeper,确定 MetaTable所在RegionServer的地址
- 去对应的RegionServer地址拿到对应数据
服务端:HBase Server - Region Server 构建RegionScanner准备进行检索
- 有多少个列簇就构建多少个StoreScanner,用于对确定的列簇数据检索
对于hbase中数据的操作
- 在修改数据时,是通过新增一条记录,每条记录都有一个版本号,每次查询出来的都是最新的数据
- 删除数据时,也是追加一条新记录,但是标记该记录被删除的标志,每次查询时,看到最新数据时是数据删除,就知道数据被删除了
- 如果进行很多次的增删操作,在小文件合并的同时,对于一些无用的记录就会删除,节约存储空间--------------》其实hbase把合并分为两种,一种是小合并minor compact,这种方式只会将少数文件进行简单合并,不会进行数据的清理,还有一种是大合并major compact,这种方式会将大部分文件进行合并,并且清理数据。但是大合并会消耗很多资源,影响性能