HBase Region原理总结
1. 环境准备
- 基于Hadoop 3.2.1
- 基于zookeeper 3.4.6
- 基于Hbase 2.2.5
资料来源:
- 官网http://hbase.apache.org/2.2/book.html
- 网络博客、视频等资料
2.HBase数据存储概述
2.1 hbase概述
- HBase是基于hdfs的一个数据库,也就是本身Hbase的数据存储在hdfs中。默认的,文件会分布式存储在hdfs节点中,并且按照128MB一块进行切分,并且会保存3份
- hdfs中数据不适合存储小文件,所以后续需要定期进行文件合并和清理来保证读写效率和性能。
- hdfs不支持随机读写,所以为了实现数据库中数据更新,hbase采取的文件追加形式来进行数据随机读写
2.2 rowkey概述
- hbase本质是以key value形式进行存储,如下图所示
key可以看成是row+columnfamily+qualifier+timestamp组合而成,value就是值 - 根据此前我另外一篇博客,为了提升查询效率,在memstore、block cache、hfile中的索引都是基于rowkey建立的。
- 这里可以看出,数据查询是基于rowkey进行的,所以rowkey的设计很重要。
- 长度一定
- 不要太长,太长会占用过多存储空间,甚至会导致key占用空间比value大不少的问题。(key后续会讲到,可以使用压缩算法进行压缩)
- 需要考虑hbase表使用场景,也就是查询维度。最好rowkey和查询维度重叠。
- 需要考虑热点问题,也就是插入热点和查询热点。
- rowkey数据可以看出,是按照一定规则进行排序展示的,timestamp是逆序,也就是数据最新数据在最前面。这个是和Version 版本机制有关。也就是存储在hbase中数据划分版本
2.3 region划分概述
- hbase的数据划分简图
- 可以看到,region其实就是一段区间范围内rowkey对应的数据,有startkey和endkey
- 每一行rowkey对应数据,可能会有多个列族column family,一个列族中可能会有多个列名qualifier
2.4 hbase在hdfs中文件存储形式
- 在hdfs中,hbase文件存储形式
访问hdfs开放出来的网页端:我的地址如下,http://linux100:9870/explorer.html#/hbase/data - 查看hdfs中对应hbase表的信息
- hbase目录
- data目录
- 对应namespace目录(hbase是一个数据库,但有别于关系型数据库,所以没有沿用database的改变,而是使用了namespace的概念)
- 数据库表目录,以及内部的region目录
这里直接在hbase shell客户端也可以查看到region的名字
- region目录下的列族目录
- 列族目录下的hfile文件
2.5 hfile查看
- 直接使用hdfs dfs -cat查看,不过由于hfile有指定格式,看起来是乱码
hdfs dfs -cat /hbase/data/doit/tb_computer_info/58b3bed2479674cb2874f07c5a7d6a2d/cf1/f8fe336766104cd3a5b63c49f976785c_SeqId_4_
2.