HBase知识点,基本原理

时间:2024-03-15 07:35:14

HBase和传统关系数据库的区别

区别主要体现在以下方面:

  • 数据类型。关系数据库具有丰富的数据类型,而HBase把数据存储为未经解释的字符串(byte[]),保存时需要序列化成字符串,取数据时也需要手动把字符串解析成不同的数据类型。
  • 数据操作。关系数据库可以进行复杂的CRUD,可以多表连接查询,而HBase只有简单的插入、查询、删除、清空等,通常只有单表的主键查询
  • 存储模式。关系数据库是基于行模式存储的,查询时如果只需要少数几行,会浪费许多磁盘空间和内存带宽。HBase是基于列存储的,可以降低I/O 开销,由于同一列族数据往往相似度高,可以获得较高的数据压缩比
  • 数据索引。关系数据库可以建多个索引,HBase只有一个索引——行键
  • 数据维护。关系数据库更新操作旧值会被覆盖,HBase中执行更新操作时,并不会删除数据旧的版本,而是生成一个新的版本,旧有的版本仍然保留
  • 可伸缩性。HBase分布式数据库就是为了实现灵活的水平扩展而开发的,因此能够轻易地通过在集群中增加或者减少硬件数量来实现性能的伸缩

HBase访问接口

Native Java API、HBase Shell、Thrift Gateway、RESTGateway、Pig、Hive

HBase中行键、列键和时间戳的概念

  • 行键(Row Key): 唯一标识了HBase表的一行,可以通过单个行键或行键区间的方式访问表,行键保存为字节数组,以字典序排序存储
  • 列族(Column Family):是HBase表的基本访问控制单元。需要在定义表时就定义好,列族数量只限于几十个。列名都以列族作为前缀,访问控制、磁盘和内存的使用统计都是在列族层面进行的,还可以被配置成支持不同类型的访问模式,比如放在内存中
  • 列限定符(Column Qualifier):列族里的数据通过列限定符(或列)来定位。列限定符不用事先定义,也不需要在不同行之间保持一致。列限定符没有数据类型,总被视为字节数组byte[]
  • 时间戳(Timestamp):每个单元格都保存着同一份数据的多个版本,这些版本采用时间戳进行索引。每次对一个单元格执行操作(新建、修改、删除)时,HBase都会隐式地自动生成并存储一个时间戳

HBase各功能组件及其作用

HBase包含一个Master主服务器和许多个Region服务器

  • Region服务器:负责存储和维护分配给自己的Region,处理来自客户端的读写请求
  • Master服务器:负责管理和维护 HBase表的分区信息。Master知道一个表被分成了哪些Region,每个Region被存放在哪台Region服务器上

HBase的数据分区机制

初始时,每个表只包含一个Region,随着数据的不断插入,Region会持续增大,当一个Region中包含的行数量达到一个阈值时,就会被自动等分成两个新的Region。随着表中行的数量继续增加,就会分裂出越来越多的Region

HBase中的分区是如何定位的?

通过META表,META表中存了Region标识符和位置信息,Region标识符=表名+开始主键+RegionID

在HBase三层结构下,客户端是如何访问到数据的

客户端首先访问 Zookeeper,获取-ROOT-表的位置信息,然后访问-ROOT-表,获得.META.表的信息,接着访问.META.表,找到所需的Region具体位于哪个Region服务器,最后才会到该Region服务器读取数据

HBase系统基本架构以及每个组成部分的作用

HBase系统基本架构包括客户端、Zookeeper服务器、Master主服务器、Region服务器

  • 客户端:包含访问 HBase 的接口,缓存了已经访问过的 Region 位置信息,使用HBase的RPC机制与Master和Region服务器进行通信
  • Zookeeper服务器:提供了稳定可靠的协同服务
    • 实时监控每个Region服务器的状态并通知给Master
    • 帮助选举出一个Master作为集群的总管,避免了Master的“单点失效”问题
    • 保存了-ROOT-表的地址和Master的地址
    • 存储了HBase的模式,包括有哪些表,每个表有哪些列族
  • Master服务器:主要负责表和Region的管理工作
    • 管理用户对表的增加、删除、修改、查询等操作。
    • 实现不同Region服务器之间的负载均衡。
    • 在Region分裂或合并后,负责重新调整Region的分布。
    • 对发生故障失效的Region服务器上的Region进行迁移
  • Region服务器:是HBase中最核心的模块,
    • 维护分配给自己的 Region,并响应用户的读写请求
    • HBase 自身并不具备数据复制和维护数据副本的功能,而是将HDFS 作为底层存储

Region服务器向HDFS文件系统中读写数据的基本原理

HBase知识点,基本原理