数据模型

逻辑视图

image.png

  • rowkey:行的主键,按字典序排序存储。rowkey为什么要排序?
  • 列族(Column Family):行中的列被分为“列族”。一般的,存放在同一列族下的数据通常都属于同一类型(可以把同一个列族下的数据压缩在一起)
  • 列键(Column Key):也称为列名,必须以列族作为前缀,格式为列族:限定词
  • 时间戳(Timestamp):插入单元格时的时间戳,默认作为单元格的版本号。
  • 存储单元格(Cell):在 HBase 中,值作为一个单元保存在单元格中。要定位一个单元,需要满足“行键+列键+时间戳”三个要素。

    物理视图

    image.png

    HBase整体架构

    image.png

    HMaster

    每台 Region Server 都会与 Master 进行通信,HMaster 的主要任务就是告诉 Region Server 它需要维护哪些 Region,具体功能如下:

  • 管理用户对表的增删改查操作;

  • 管理 Region Server 的负载均衡,动态调整 Region 分布;
  • 在 Region 分裂后,负责新的 Region 的分配;
  • 在 Region Server 停机后,负责失效 Region Server 上的 Region 的迁移;

    Region Server

    image.png

    HBase读写流程

  • 先去zk中访问META表,获得regoin与region server的关系

  • Client缓存META表在本地,从META表中找到相应row key需要访问的Region Server
  • Client的Put操作会将数据先写入WAL
  • 当数据写入WAL,然后将数据拷贝到MemStore。 MemStore是内存空间,数据并 未写入磁盘
  • 一旦数据成功拷贝到MemStore。 Client将收到ACK
  • 当 MemStore中的数据达到阈值,数据会写入HFile

image.png

Compaction

HBase 的 MemStore 在满足阈值的情况下会将内存中的数据刷写成 HFile ,一个 MemStore 刷写就会形成一个 Hfile。随着时间的推移,同一个 Store 下的 HFile 会越来越多,文件太多会影响HBase查询性能,主要体现在查询数据的io次数增 加。为了优化查询性能,HBase会合并小的HFile以减少文件数量,这种合并HFile的操 作称为Compaction,这也是为什么要进行Compaction的主要原因。

Major Compaction和Minor Compaction

  • Minor Compaction :会将邻近的若干个 HFile 合并,在合并过程中会清理 TTL 的 数据,但不会清理被删除的数据。
  • Major Compaction:会将一个 store 下的所有 HFile 进行合并,并且会清理掉过 期的和被删除的数据,即在 Major Compaction 会删除全部需要删除的数据。值得 注意的是,一般情况下,Major Compaction时间会持续比较长,整个过程会消耗 大量系统资源,对上层业务有比较大的影响。因此,生产环境下通常关闭自动触发 Major Compaction功能,改为手动在业务低峰期触发

    HBase调优

    HBase读优化

    图片.png

    HBase写优化

    image.png

    HBase高可用和容灾

    HLog

    HBase采用类LSM树的架构体系,数据写入并没有直接写入数据文件,而是会先写入缓 存(Memstore),在满足一定条件下缓存数据再会异步刷新到硬盘。
    为了防止数据写入缓存之后不会因为Region Server进程发生异常导致数据丢失,在 写入缓存之前会首先将数据顺序写入HLog中。如果不幸一旦发生Region Server宕机, 这种设计可以从HLog中进行日志回放进行数据补救,保证数据不丢失。

    Region Server故障恢复

    image.png

    HMaster HA

    zookeeper的watch机制