Hadoop Database
便于时间查询;
Hbase是一个分布式的、面向列的开源数据库,该技术来源于Chang et al所写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。
就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bittable的能力。
HBase是Apache的Hadoop项目的子项目。
HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库,另一个不同的是HBase基于列的而不是基于行的模式。
BIG Table表的想法:
以存放关系的学生表为例:
用bigtable的想法为,三个列的大表:学号(key)、属性(姓名、年龄、、、)、值(value)
世界上所有的二维表,都可以用三个列的大表来表示:
行键(key)对象的标识值、
属性、
Value
Bigtable表查询: 对key-value的查询很快
HBase逻辑模型:
以表的形式存放数据;
表由行与列组成,每个列属于某个列族,由行和列确定的存储单元称为元素;
每个元素保存了同一份数据的多个版本,由时间戳来标识区分;
HABASE有多表
列族需要预先定义,列族里面的列不需要预先定义列族里面的列由限定符限制;
行键可以重复;
HBASE解决HDFS文件系统不能修改问题:
打删除标记
在内存中建立机制,数据存储内存,数据在内存中修改(追加、)内存中数据重整机制、
内存中收集一定时间的数据后,向硬盘中一写就一个文件一个块
每隔一断时间进行一数据重整合并,合并小的文件,解决删除问题
行键:
行键是数据行在表里的唯一标识,并作为检索记录的主键;
访问表里的行只有三种方式:
通过单个行键访问
给定行键的范围访问
全表扫描
行键可以是最大长度不超过64kb的任意字符串,并按照字典序存储;
对于经常要一起读取的行,要对行键值精心设计,以便它们能放在一起存储;
列族与列:
列表示为<列族>:<限定符>
列族是预先定义好的,列族中的列是随意添加的。
Hbase在磁盘上按照列族存储数据,这种列式数据库的设计非常适合于数据分析的情形;
列族里的元素最好具有相同的读写方式(例如等长的字符串),以提高性能;
面向列存储意义:在行键相同的情况下,列族相同的会放在一起,
时间戳:
对应每次数据操作的时间,可由系统自动生成,也可以由用户显示的赋值;
HBase支持两种数据版本回收方式:
1、每个数据单元,只存储指定个数的最新版本
2、保存指定时间长度的版本
常见的客户端时间查询“某个时刻起的最新数据”或“给我全部版本的数据”
元素由行键,列族限定符,时间戳唯一决定;
元素以字节码形式存放,没有类型之分;
Hbase物理模型:
Region和Region服务器:
表在行方向上,按照行键范围划分成苦干的Region;
每个表最初只有一个region,当记录数增加到超过某个阈值时,开始分裂成两个region;
物理上所有数据存放HDFS,由region服务器提供region的管理;
一台物理节点只能跑一个 HRedionServer;
一个 HRegionserver可以管理多个Region实例;
一个Region实例包括Hlog日志和存放数据的Store;
Hmaster作为总控节点;
Zookeeper负责调度;
Hlog:
用于灾难恢复;
预写式日志,记录所有更新操作,操作先记录日志,数据才会写入
-ROOT-和 .META. 表
HBase中两张特殊的表
.META. -----à记录了用户表的Region信息, .META. 可以有多个region;
-ROOT- -----à记录了 .META.表的region信息, --ROOT- 只有一个region;
Zookeeper中记录了 –ROOT-表的location
Memstore与storefile:
一个region由多个store组成,每个store包含一个列族的所有数据;
Store包括位于把内在的memstore和位于硬盘的storefile;
写操作先写memstore,当memstore中的数据量达到某个阈值,Hregionserver会启动flashcache进程写入storefile,每次写入形成单独的一个storefile;
当storefile文件的数量增长到一定阈值后,系统会进行合并,在合并过程中会进行版本合并和删除工作,形成更大的storefile;
当storefile大小超过一定阈值后,会把当前的region分割为两个,并由hmaster分配,到相应的region服务器,实现负载均衡;
客户端检索数据时,先在memstore找,找不到再找storefile;
Hbase应用场景:
适用于大量写,同时也有读的(key --- value查询、时间)
OLTP/OLAP不适合;联机事务处理,随机读写;
很适合按照时间排序top n的场景(社交网站等)
Hbase瓶颈是硬盘写, oracle瓶颈是硬盘寻道时间,
列式数据库与行式数据库对比:
减少I/O读取量。
压缩,减少磁盘占用;