4.1概述
- HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和半结构化松散数据。
- HBase与传统数据库的区别
- 数据类型上的区别,它把数据存储为未经解释的字符串
- 数据操作,没有像关系型数据库那样的复杂数据操作,通常采用单表的主键查询。
- 存储模式,关系型数据库是采用行进行存储的,但是HBase是采用列存储的。
- 数据索引,HBase只有一个索引,就是行键。
- 数据维护,HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧的版本任然保存。
- 可伸缩性,关系型数据库很难实现横向扩展,纵向扩展也很有限。而HBase是为了实现灵活的水平扩展而开发的。
- 但是存在自身的局限性,也就是不支持事务,无法实现跨行的原子性。
4.2HBase访问接口
- HBase提供Native Java API、HBase Shell、Thrift Gateway、REST Gateway、Pig、Hive等多种访问方式。
4.3HBase数据模型
- HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳。列族支持动态扩展。
- 表,采用表来组织数据,表由行和列组成。
- 行,访问表中行的方式:
- 通过单个行键访问
- 通过一个行键的区间来访问
- 全表扫描
- 列族, 它是基本的控制访问单元
- 列限定符,列族中的数据通过列限定符来定位,不许事先定义,没有数据类型,但是常常被视为字节数组
- 单元格, 通过行键、列族、列限定符确定一个单元格。单元格中没有数据类型,总是被视为字节数组,每个版本对应一个时间戳。
- 时间戳, 时间戳一般是64位整型
- 数据坐标,由四个定位,行键、列族、列限定符、时间戳。
- 概念视图,看起来是像是由许多行组成的。
- 物理视图, 但是在物理层面,它是采用了基于列的存储方式。按照列族分开存放,里面包括行键和时间戳。
- 面向列存储,行式数据库适合于小批量的数据处理;列式数据库适合面向批量数据处理和即席查询。优点是可以降低I/O开销。
4.4HBase的实现原理
- HBase的功能组件,主要有三个功能组件,库函数,链接到每个客户端;Master主服务器;许多个Region服务器。
- Region服务器负责存储和维护分配给自己的Region,处理来自客户端的读写请求。
- 主服务器,Master负责管理和维护HBase表的分区信息。
- Hbase客户端并不依赖于Master而是借助Zookeeper来获得Region的位置。
- 表和Region, Region是负载均衡和数据分发的基本单位。,每个Region的大小是100M~200MB,同一个Region是不会被拆分到多个Region服务器上的。
- Region的定位,每个Region都有一个的RegionID来标识它的唯一性,一个Region标识符可以表示为“表名 开始主键 RegionID”。映射表包括两项内容,一个是Region的标识符,另一个是Region服务器标识,也称为“元数据表”,又名“.META.表”。如果元数据表过多了,就会产生根数据表,-ROOT-表,客户访问用户数据前,首先访问Zookeeper。
4.5HBase运行机制
- 客户端是访问HBase的接口,同时在缓存中维护着已经访问过的Region位置信息,用来加快后续访问过程。
- Zookeeper服务器并非一台单一的机器,可能由多台机器构成的集群来提供稳定可靠的协同服务。Zookeeper中保存了根数据表和Master的地址。
- Master, Master服务器主要负责Region的管理工作。
- 管理用户对于表的增加、删除、修改、查询等操作。
- 实现不同Region服务器之间的负载均衡
- 在Region分裂合并后,负责重新调整Region的分布
- 对于发生故障失效的Region服务器上的Region进行迁移
- Region服务器,是HBase最核心的模块,负责维护分配给自己的Region,并且响应读写请求。HBase本身并不具备数据复制和维护数据副本功能,而是HDFS可以为HBase提供这些支持。
1. Region服务器的工作原理
- Region服务器中管理了一系列的Region对象和一个HLog文件,其中HLog文件是磁盘上面的记录文件,记录着所有的更新操作。
- 每个Region对象又是由多个Store组成,每个Store对应表中的的一个列族存储,每个Store又包含一个MemStore和若干个StoreFile;其中MemStore是内存中的缓存,保存最新更新的数据;StoreFile是磁盘中的文件,这些文件都是B树结构,底层实现方式是HDFS的HFile
2. Store的工作原理
- MemStore是排序的内存缓冲区,当MemStore缓存满时,就会刷新到磁盘中的StoreFile文件中。随着多个StoreFile合并称为一个大的文件,当文件超过一个阈值的时候,会触发一个文件分裂操作,同时当前一个父Region会分裂成两个子Region,新分裂出的两个子Region被Master分配到相应的Region服务器上。
3. HLog的工作原理
- HBase采用HLog来保证系统发生故障时能够发生故障时能够恢复到正常状态。每个Region服务器中配置一个HLog文件,它是一种预写式日志,也就是被写入日志后才能够写入MemStore缓存。
4. HBase常见的Shell
-
hbase shell
进入Shell环境
-
create ‘t1‘, {NAME => ‘f1‘, VERSIONS => 5}
创建表t1,列族f1,列族版本号为5
-
create ‘t1‘, {NAME => ‘f1‘}, {NAME => ‘f2‘}, {NAME => ‘f3‘}
创建表t1,三个列族,或则使用命令代替create ‘t1‘, ‘f1‘, ‘f2‘, ‘f3‘
-
list
列出HBase所有的表信息
-
put ‘t1‘, ‘row1‘, ‘f1:c1‘, ‘value1‘, 1421822284898
向表中t1中行row1和列f1:c1对应的单元格中添加数据value1,时间戳为后面那串数字。
-
get
用来获取数据
-
scan
用来浏览表
-
alter
修改列族模式alter ‘t1‘, NAME => ‘f1‘
向表t1中添加列族f1alter ‘t1‘, NAME => ‘f1‘ METHOD => ‘delete‘
删除表中列f1
-
count
统计表中行数
-
describe ‘t1‘
显示表的相关信息
-
drop
删除表
-
shutdown
关闭集群