《大数据技术应用与原理》第二版-第四章分布式数据库HBase

时间:2022-01-21 03:24:16

4.1概述

  1. HBase是一个高可靠、高性能、面向列、可伸缩的分布式数据库,是谷歌BigTable的开源实现,主要用来存储非结构化和半结构化松散数据。
  2. HBase与传统数据库的区别
    • 数据类型上的区别,它把数据存储为未经解释的字符串
    • 数据操作,没有像关系型数据库那样的复杂数据操作,通常采用单表的主键查询。
    • 存储模式,关系型数据库是采用行进行存储的,但是HBase是采用列存储的。
    • 数据索引,HBase只有一个索引,就是行键。
    • 数据维护,HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧的版本任然保存。
    • 可伸缩性,关系型数据库很难实现横向扩展,纵向扩展也很有限。而HBase是为了实现灵活的水平扩展而开发的。
    • 但是存在自身的局限性,也就是不支持事务,无法实现跨行的原子性。

4.2HBase访问接口

  1. HBase提供Native Java API、HBase Shell、Thrift Gateway、REST Gateway、Pig、Hive等多种访问方式。

4.3HBase数据模型

  1. HBase是一个稀疏、多维度、排序的映射表,这张表的索引是行键、列族、列限定符和时间戳。列族支持动态扩展。
  2. 表,采用表来组织数据,表由行和列组成。
  3. 行,访问表中行的方式:
    • 通过单个行键访问
    • 通过一个行键的区间来访问
    • 全表扫描
  4. 列族, 它是基本的控制访问单元
  5. 列限定符,列族中的数据通过列限定符来定位,不许事先定义,没有数据类型,但是常常被视为字节数组
  6. 单元格, 通过行键、列族、列限定符确定一个单元格。单元格中没有数据类型,总是被视为字节数组,每个版本对应一个时间戳。
  7. 时间戳, 时间戳一般是64位整型
  8. 数据坐标,由四个定位,行键、列族、列限定符、时间戳。
  9. 概念视图,看起来是像是由许多行组成的。
  10. 物理视图, 但是在物理层面,它是采用了基于列的存储方式。按照列族分开存放,里面包括行键和时间戳。
  11. 面向列存储,行式数据库适合于小批量的数据处理;列式数据库适合面向批量数据处理和即席查询。优点是可以降低I/O开销。

4.4HBase的实现原理

  1. HBase的功能组件,主要有三个功能组件,库函数,链接到每个客户端;Master主服务器;许多个Region服务器。
    • Region服务器负责存储和维护分配给自己的Region,处理来自客户端的读写请求。
    • 主服务器,Master负责管理和维护HBase表的分区信息。
    • Hbase客户端并不依赖于Master而是借助Zookeeper来获得Region的位置。
  2. 表和Region, Region是负载均衡和数据分发的基本单位。,每个Region的大小是100M~200MB,同一个Region是不会被拆分到多个Region服务器上的。
  3. Region的定位,每个Region都有一个的RegionID来标识它的唯一性,一个Region标识符可以表示为“表名 开始主键 RegionID”。映射表包括两项内容,一个是Region的标识符,另一个是Region服务器标识,也称为“元数据表”,又名“.META.表”。如果元数据表过多了,就会产生根数据表,-ROOT-表,客户访问用户数据前,首先访问Zookeeper。

4.5HBase运行机制

  1. 客户端是访问HBase的接口,同时在缓存中维护着已经访问过的Region位置信息,用来加快后续访问过程。
  2. Zookeeper服务器并非一台单一的机器,可能由多台机器构成的集群来提供稳定可靠的协同服务。Zookeeper中保存了根数据表和Master的地址。
  3. Master, Master服务器主要负责Region的管理工作。
    • 管理用户对于表的增加、删除、修改、查询等操作。
    • 实现不同Region服务器之间的负载均衡
    • 在Region分裂合并后,负责重新调整Region的分布
    • 对于发生故障失效的Region服务器上的Region进行迁移
  4. Region服务器,是HBase最核心的模块,负责维护分配给自己的Region,并且响应读写请求。HBase本身并不具备数据复制和维护数据副本功能,而是HDFS可以为HBase提供这些支持。
1. Region服务器的工作原理
  1. Region服务器中管理了一系列的Region对象和一个HLog文件,其中HLog文件是磁盘上面的记录文件,记录着所有的更新操作。
  2. 每个Region对象又是由多个Store组成,每个Store对应表中的的一个列族存储,每个Store又包含一个MemStore和若干个StoreFile;其中MemStore是内存中的缓存,保存最新更新的数据;StoreFile是磁盘中的文件,这些文件都是B树结构,底层实现方式是HDFS的HFile
2. Store的工作原理
  1. MemStore是排序的内存缓冲区,当MemStore缓存满时,就会刷新到磁盘中的StoreFile文件中。随着多个StoreFile合并称为一个大的文件,当文件超过一个阈值的时候,会触发一个文件分裂操作,同时当前一个父Region会分裂成两个子Region,新分裂出的两个子Region被Master分配到相应的Region服务器上。
3. HLog的工作原理
  1. HBase采用HLog来保证系统发生故障时能够发生故障时能够恢复到正常状态。每个Region服务器中配置一个HLog文件,它是一种预写式日志,也就是被写入日志后才能够写入MemStore缓存。
4. HBase常见的Shell
  1. hbase shell 进入Shell环境
  2. create ‘t1‘, {NAME => ‘f1‘, VERSIONS => 5} 创建表t1,列族f1,列族版本号为5
  3. create ‘t1‘, {NAME => ‘f1‘}, {NAME => ‘f2‘}, {NAME => ‘f3‘} 创建表t1,三个列族,或则使用命令代替create ‘t1‘, ‘f1‘, ‘f2‘, ‘f3‘
  4. list 列出HBase所有的表信息
  5. put ‘t1‘, ‘row1‘, ‘f1:c1‘, ‘value1‘, 1421822284898向表中t1中行row1和列f1:c1对应的单元格中添加数据value1,时间戳为后面那串数字。
  6. get用来获取数据
  7. scan用来浏览表
  8. alter修改列族模式alter ‘t1‘, NAME => ‘f1‘向表t1中添加列族f1alter ‘t1‘, NAME => ‘f1‘ METHOD => ‘delete‘删除表中列f1
  9. count统计表中行数
  10. describe ‘t1‘显示表的相关信息
  11. drop删除表
  12. shutdown关闭集群