第四章:HBase
HDFS可以用来存储海量数据,但顺序访问效率低;传统数据库可以随机访问,但不适合存储大量数据;因此HBase数据库应运而生。
数据结构分类
- 结构化数据:以关系型数据库表形式管理的数据
- 半结构化数据:具有非关系模型、基本固定结构模式的数据。比如日志、xml
- 非结构化数据:没有固定模式的数据,如 word、pdf
HBase与传统数据库的区别
- 数据类型是未被解释的字符串
- 数据操作方面,HBase的很多数据是在一张表里,不用传统的连接方式
- 存储模式:HBase采用物理列存储模式,关系型数据库是行存储。
- 数据索引:HBase只支持行键索引,关系型数据库可以对不同的列做索引。
- 数据维护:更新时,关系型数据库会把数据替换掉,Hbase会把旧版本的数据保留一段时间。
- 可伸缩性:关系型数据库很难水平扩展,HBase是分布式集群,方便水平扩展。
HBase的数据结构
定位使用四个值定位【行键,列族,列限定符,时间戳】
Hbase是行模式逻辑、列物理存储的数据库。
实现原理
HBase由连接客户端的库函数、一个master服务器和许多region服务器组成。
master维护数据存放信息,分配管理region和负载均衡;region负责实际的读写。
其中的一个表可以分为多个region。
为了定位region需要三层查询,zookeeper文件 -》-ROOT- -》 .META. -》 region。
- zookeeper文件,记录了-root-的位置信息
- root 只能又一个region存储,并且位置固定。
- meta 可以又多个region存储,记录的是region服务器和region的对应关系,存储在内存中。
运行机制
Store是region运作的核心
参与要素:Store、MemStore、Hlog、StoreFile
写数据过程:先写入到MemStore和Hlog中,Hlog写完之后会通知客户端
读数据过程:先访问MemStore没有再从StoreFile中找。
缓存刷新过程:定期将MemStore数据写入StoreFile,记录Hlog,每次刷写都产生新的StoreFile
StoreFile维护过程:storefile数量太多会影响性能,可以将多个合并,也可以将一个大的进行region拆分。
性能优化
- 行键:由于数据是按照行键排序的,可以将常用的数据放得更近一些。
- 利用内存:创建表的时候可以将表放到region服务器的缓存中,提高缓存命中率
- 按版本保留,设置保留数据最近的几个版本,太老的数据可以清理掉
- 按时间保留,设置数据的最长存活时间,超出清理。