HBase简介

作者: 丹之 | 来源:发表于2018-11-30 17:44 被阅读109次

简介

物理视图

  • HBase支持数据多版本特性,通过带有不同时间戳的多个KeyValue版本来实现的;
  • 每次put,delete都会产生一个新的Cell,都拥有一个版本;
  • 默认只存放数据的三个版本,可以配置;
  • 查询默认返回最新版本的数据,可以通过制定版本号或版本数获取旧数据。

架构设计


HBase 的写过程如下:

  • 先将数据写到WAL中;
  • WAL 存放在HDFS之上;
  • 每次Put、Delete操作的数据均追加到WAL末端;
  • 持久化到WAL之后,再写到MemStore中;
  • 两者写完返回ACK到客户端。



    MemStore 其实是一种内存结构,一个Column Family 对应一个MemStore,MemStore 里面的数据也是对 Rowkey 进行字典排序的,如下:



    既然我们写数都是先写 WAL,再写 MemStore ,而 MemStore 是内存结构,所以 MemStore 总会写满的,将 MemStore 的数据从内存刷写到磁盘的操作成为 flush:

    每次 flush 操作都是将一个 MemStore 的数据写到一个 HFile 里面的,所以上图中 HDFS 上有许多个 HFile 文件。文件多了会对后面的读操作有影响,所以 HBase 会隔一定的时间将 HFile 进行合并。根据合并的范围不同分为 Minor Compaction 和 Major Compaction:



    Minor Compaction: 指选取一些小的、相邻的HFile将他们合并成一个更大的Hfile。
    Major Compaction:
  • 将一个column family下所有的 Hfiles 合并成更大的;
  • 删除那些被标记为删除的数据、超过TTL(time-to-live)时限的数据,以及超过了版本数量限制的数据。
    HBase 读操作相对于写操作更为复杂,其需要读取 BlockCache、MemStore 以及 HFile。


Rowkey 的作用


HBase 中的 Rowkey 主要有以下的作用:

  • 读写数据时通过Row Key找到对应的Region
  • MemStore 中的数据按RowKey字典顺序排序
  • HFile中的数据按RowKey字典顺序排序
    从下图可以看到,底层的 HFile 最终是按照 Rowkey 进行切分的,所以我们的设计原则是结合业务的特点,并考虑高频查询,尽可能的将数据打散到整个集群。


三种比较场景的 Rowkey 设计方案


HBase 比较常用的组件:

https://www.iteblog.com/archives/2436.html

相关文章

网友评论

    本文标题:HBase简介

    本文链接:https://www.haomeiwen.com/subject/clahcqtx.html