1.HBase 简介
1.1 HBase是BigTable的开源实现,BigTable是架构在分布式文件系统GFS之上的。
1.2 HBase的优点
- 高可靠性;
- 高性能;
- 面向列;
- 可伸缩;
HBase是一个分布式数据库,可以用来存储非结构化和半结构化的松散数据。
1.3 HBase和BigTable底层技术的对应关系
1.4 HBase主要是为了满足大数据实时处理需求而开发设计的。传统关系型数据的随着数据量的增加,数据库可扩展性差,数据库效率低。
1.5 HBase数据库和传统关系型数据库的联系与区别
- 数据类型方面:传统数据类型多,是用的关系数据模型,而HBase只有Byte类型。
- 数据操作方面:HBase 所有数据存储在一张表中。
- 存储模式:关系型数据库基于行模式存储,而HBase基于列存储。
- 数据索引:关系数据库有多级索引,可以构建非常复杂的索引,而HBase基于列索引。
- 数据维护:关系型数据库新版本的数据或覆盖旧版本的数据,而HBase不会覆盖,HBase数据具有一个时间戳,超时就删除旧数据。
- 可伸缩性:HBase可扩展性好,水平扩展性好。
1.6 HBase接口:通过Java API可以访问和提供的SQL类型接口访问。
2.HBase 数据模型
2.1 HBase是一个稀疏的多维度的排序的映射表。
- 列限定符(列)
- 每个值都是未经解释的字符串也就是Bytes数组。
- 一个行可以有一个行键和任意多个列;
- 列族是HBase当中一个非常核心的概念。可以对列族进行动态增加。
- HBase保存旧数据,具有时间戳,新旧数据保存在一个单元格中,通过时间戳来区分。
2.2 HBase数据的概念视图
HBase是一个稀疏表,很多单元可是空的。
2.3 HBase数据的物理视图
2.4 数据坐标
HBase可以视作一个键值数据库。
键值对数据如下
2.5 行式存储结构和列式存储结构
- 面向行存储的传统关系型数据库
- 缺点:对于分析某一列数据,需要扫描数据库的每一行取出该列数据,效率低,代价高。
- 面向列存储的数据库:按列存储。
3.HBase 的实现原理
3.1 HBase的功能组件
- 库函数
- Master服务器
- Region服务器
3.2 两个核心概念表和Region
一个HBase表被划分为多个Region,随着Region逐渐增大,一个Region分裂为多个Region(物理存储位置不变)。
3.3 Region定位
HBase设计了三层结构来实现Region的寻址和定位。
- 构建元数据表,用于存储Region的ID和Region服务器的ID,构建这样的映射表,称为.META.表。
- 随着Region的增多,映射表增大,意味着映射表需要增加,最后构成一个Root表,Root表不允许被分裂。
HBase的三层结构各层次的作用
- 可以计算得出,该三层架构可以存储的数据很大,远远满足企业的需求,所以这种设计合理。
- 为了加速寻址,客户端会缓存位置信息,同时,需要解决缓存失效问题。
- 采用惰性解决机制,若发现缓存失效,才把最新的Region ID在缓存下来。
4.HBase运行机制
-
HBase的系统架构
Zookeeper服务器管理整个集群,保证集群中只有一个HMaster在运行,其他的master备用。- Master(主服务器):管理如下任务。
- Master(主服务器):管理如下任务。
-
Region服务器的工作原理
- 多个Region服务器构成一个Region服务器集群,公用一个HLog。
-
Store的工作原理
- 用户写数据过程:分配到一个Region服务器上去执行。
- 读数据过程
- 缓存的刷新
- StoreFile的合并:StoreFile数量达到一定阈值后,引发合并操作。
- StoreFile的合并与分裂:当StoreFile越来越大时,又会引发分裂操作,一个大的Region就会分为两个Region。
- 用户写数据过程:分配到一个Region服务器上去执行。
-
HLog的工作原理:出现故障时,通过日志来恢复数据。
- Zookeeper集群检测到服务器故障,并告诉master,master就把故障机上的HLog复制过来,把HLog中属于各个Region服务器的都拆分出来,分给其他Region服务器,然后该服务器根据日志恢复数据。
- HLog公用,对数据的恢复提供了很大的便利。
5.HBase编程
5.1 HBase是建立在hadoop 上的,因此需要先启动hadoop,再启动HBase;关闭时,先关闭HBase,在关闭hadoop。
5.2 可以通过HBase自带的Zookeeper组价来为HBase提供服务。规模较大的集群建议安装Zookeeper组件来提供服务。
5.3 HBase 常用shell命令
- creat 表名,列名1,列名2,列名3:创建表
- list :查看创建的表
- 通过put命令添加数据
- 通过scan查看添加的信息
- 通过get,通过思维信息来定位数据值
- 删除表:先使表失效 disable 表名,然后drop 表名删除表。