Hbase介绍 | 青训营笔记

369 阅读4分钟

这是我参与「第四届青训营 」 笔记创作活动的第7天

HBase设计理念

HBase基于HDFS实现存储计算分离架构的分布式表格存储服务。Hbase是一个面向列存储的分布式存储系统,它的优点在于可以实现高性能的并发读写操作,同时Hbase还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性。

定义

  • HBase是一个开源的NoSQL分布式数据库,参考Google BigTable的设计,对稀疏表提供更高的存储空间使用率和读写效率。

  • 采用存储计算分离架构

    • 存储层基于HDFS存储数据
    • 计算层提供灵活快速的水平扩展,负载均衡和故障恢复能力
  • 提供强一致语义,在CAP理论中属于CP系统

区别

HBase和关系型数据库的区别:

  1. 数据结构

    • HBase半结构化,无数据类型;按照列族稀疏存储,缺省数据不占用存储空间;支持多版本数据;
    • 关系型数据库是结构化的,数据类型丰富;按完整行存储,缺省的列需要存储占位符,不支持多版本数据;
  2. 读写模式

    • HBase支持按需读写部分列;关系型数据库支持完整的事务语义
  3. 事务支持

    • HBase仅支持单行内原子性;;关系型数据库支持完整的事务语义
  4. 数据规模

    • HBase适用于TB,PB级海量数据,水平扩展快速平滑;关系型数据库仅适用于GB、小量TB级,扩展过程较复杂
  5. 索引支持

    • HBase仅支持rowkey主键索引;关系型数据库支持二级索引

补充

1.数据类型,HBase只有简单的字符类型,所有的类型都是交由用户自己处理,它只保存字符串。而关系数据库有丰富的类型和存储方式。 2.数据操作:HBase只有很简单的插入、查询、删除、清空等操作,表和表之间是分离的,没有复杂的表和表之间的关系,而传统数据库通常有各式各样的函数和连接操作。 3.存储模式:HBase是基于列存储的,每个列族都由几个文件保存,不同的列族的文件时分离的。而传统的关系型数据库是基于表格结构和行模式保存的 4.数据维护,HBase的更新操作不应该叫更新,它实际上是插入了新的数据,而传统数据库是替换修改 5.可伸缩性,Hbase这类分布式数据库就是为了这个目的而开发出来的,所以它能够轻松增加或减少硬件的数量,并且对错误的兼容性比较高。而传统数据库通常需要增加中间层才能实现类似的功能

HBase数据模型

Hbase是半结构化数据模型。以列族为单位存储数据,以行键索引数据

逻辑结构

image-20220806090135939.png

  • 其中Row key根据字典序实现自动排序。按照Region分别进行维护,按照列族进行切分store,底层以store为单位进行存储,一个region的数据存储在一个机器中,一个store存储为一个文件。
  • 适合稀疏数据,缺省列不占用存储空间。
  • 通过(rowkey, column family, column qualifier, version)唯一指定一个具体的值。
  • 允许批量读取多行的部分列族/列数据。

物理结构

  • 物理数据结构最小单元是KeyValue结构:
  • 每个版本的数据都携带全部行列信息。
  • 同一行,同一列族的数据物理上连续有序存储。

image.png

  • 同列族内的KeyValue按rowkey字典序升序,column qualifier升序,version 降序排列。
  • 不同列族的数据存储在相互独立的物理文件,列族不保证数据全局有序。
  • 同列族下不同物理文件间不保证数据全局有序。
  • 仅单个物理文件内有序。

HBase适用场景

  • “近在线”的海量分布式KV /宽表存储,数据量级可达到PB级以上
  • 写密集型、高吞吐应用,可接受一 定程度的时延抖动
  • 宇典序主键索引、批量顺序扫描多行数据的场景
  • Hadoop大数据生态友好兼容
  • 半结构化数据模型,行列稀疏的数据分布,动态增减列名
  • 敏捷平滑的水平扩展能力,快速响应数据体量、流量变化

HBase业界典型应用

  1. 半结构化/字典序有序索引的数据

    • 典型用例:字节跳动推荐中台基于HBase提供“近在线”读写推荐候选数据集
  2. “近在线”海量分布式lv/宽表存储

    • 典型用例:Facebook存储用户的互动消息
  3. 写密集型高吞吐场景

    • 时序存储引擎,典型场景是日志,监控数据存储

参考文献

  1. Hbase总结(四)- Hbase与传统数据库的区别
  2. Hbase与传统数据库的区别
  3. HBase基础【HBase简介、HBase安装、HBase shell操作】