HBase简介
1) HBase定义
HBase是一种分布式、面向列的开源数据库。、具有良好的扩展性、低写入/查询延迟的特点。
2)HBase与传统的关系数据库的区别:
|
HBase |
RDB |
数据类型 |
简单的,存储为未经解释的字符串 |
丰富的数据类型和存储方式 |
数据操作 |
只有简单的插入、查询、删除和清空等 |
丰富的操作,如:多表连接 |
存储模式 |
基于列存储 |
基于行模式 |
数据索引 |
只有行键索引 |
多个索引 |
数据维护 |
生成新版,旧版仍保留 |
新值会替换旧值 |
可伸缩性 |
可扩展性强 |
很难扩展 |
3)HBase的功能组件
l 库函数:链接到每个客户端
l 一个Master主服务器
l 许多个Region服务器
HBase的三层结构
4)Hbase架构
Region服务器工作原理
— Region服务器是HBase中最核心的模块,负责维护分配给自己的Region,并响应用户的读写请求
a. 用户读写数据过程
用户写入数据时,被分配到相应Region服务器去执行
用户数据首先被写入到MemStore和Hlog中
只有当操作写入Hlog之后,commit()调用才会将其返回给客户端
当用户读取数据时,Region服务器会首先访问MemStore缓存,如果找不到,再去磁盘上面的StoreFile中寻找
b. 缓存的刷新
系统会周期性地把MemStore缓存里的内容刷写到磁盘的StoreFile文件中,清空缓存,并在Hlog里面写入一个标记
每次刷写都生成一个新的StoreFile文件,因此,每个Store包含多个StoreFile文件
每个Regiom服务器都有一个自己的Hlog文件,每次启动都检查该文件,确认最后一次执行缓存刷新操作之后是否发生新的写入操作
c. StorreFile的合并
每次刷写都生成一个新的StoreFile,数量太多,影响查找速度
调用Store.compact()把多个合并成一个
合并操作比较耗费资源,只有数量达到一个阈值才启动