HBase工作流程及存储结构

所用的版本:hbase-1.2.0-cdh5.15.1

一.meta表

zookeeper记录了保存meta表的机器是hadoop000:

[zk: localhost:2181(CONNECTED) 4] get /hbase/meta-region-server
�regionserver:60020��!���*�PBUF
 
	hadoop000�������. 
cZxid = 0x15000007a4
ctime = Fri Feb 05 15:05:31 CST 2021
mZxid = 0x15000007a4
mtime = Fri Feb 05 15:05:31 CST 2021
pZxid = 0x15000007a4
cversion = 0
dataVersion = 0
aclVersion = 0
ephemeralOwner = 0x0
dataLength = 63
numChildren = 0

meta表(4条数据,在逻辑上是一条,表示一个region的信息):
meta表,记录了每个region的startKey和endKey

hbase(main):001:0> scan 'hbase:meta'
ROW                                             COLUMN+CELL   
 pk_hbase_java_api,,1598776765798.d36985fc0e670 column=info:regioninfo, timestamp=1612508732228, value={ENCODED => d36985fc0e67055dc277728c7fefa73b, NAME => 'pk_hbase_java_api,,1598776765
 55dc277728c7fefa73b.                           798.d36985fc0e67055dc277728c7fefa73b.', STARTKEY => '', ENDKEY => ''}                                                                      
 pk_hbase_java_api,,1598776765798.d36985fc0e670 column=info:seqnumDuringOpen, timestamp=1612508732228, value=\x00\x00\x00\x00\x00\x00\x00\x13                                              
 55dc277728c7fefa73b.                                                                                                                                                                      
 pk_hbase_java_api,,1598776765798.d36985fc0e670 column=info:server, timestamp=1612508732228, value=hadoop000:60020                                                                         
 55dc277728c7fefa73b.                                                                                                                                                                      
 pk_hbase_java_api,,1598776765798.d36985fc0e670 column=info:serverstartcode, timestamp=1612508732228, value=1612508724480                                                                  
 55dc277728c7fefa73b.

meta表的rowkey组成为:表名,region startKey,创建时间.hash值。如果当前region为table的第一个region时(第一个region无start key)时,region startKey=null。

meta表只有一个列簇info,并且包含四列:
1、regioninfo:当前region的startKey与endKey,name等消息
2、seqnumDuringOpen:
3、server:region所在服务器及端口
4、serverstartcode:服务开始的时候的timestamp

二.HBase工作流程

在这里插入图片描述

1.读的流程

  • client访问hbase时,会根据配置的zookeeper地址,在zookeeper中找到保存meta表的机器。
  • 客户端会将该meta表加载到本地并进行缓存,根据namespace、表名、以及rowKey查找数据,确定region信息。
  • region会有对应的RegionServer信息,就可以与指定的Server进行通信。

查询时namespace、表名、以及rowKey可以确定meta表中的rowkey,因为meta表中的rowkey中包含region startKey。

2.写的流程

  • client从Zookeeper中获取meta表所在节点。
  • 客户端会将该meta表加载到本地并进行缓存,根据namespace、表名、以及rowKey查找数据,确定region信息。
  • 获取指定regionServer的信息。
  • HRegionServer先将操作和数据写入HLog,再将数据写入MemStore,并保持有序。
  • 当MemStore的数据量超过阈值时,将数据溢写磁盘,生成一个StoreFile文件。
  • 当Store中StoreFile的数量超过阈值时,将若干小StoreFile合并(Compact)为一个大StoreFile。
  • 当Region中最大Store的大小超过阈值时,Region分裂(Split),等分成两个子Region。

三.物理存储结构

在这里插入图片描述
1.Region中有多个Store,一个Store对应一个列簇,Region对应完整的一段逻辑表。
2.Store包含1个MemStore(内存)和多个StoreFile(HDFS)组成。

HBase配置的数据存放路径:

<property>
    <name>hbase.rootdir</name>
    <value>hdfs://hadoop000:8020/hbase</value>
</property>

查看hdfs上的文件:

[hadoop@hadoop000 ~]$ hadoop fs -ls /hbase/data/default/pk_hbase_java_api/d36985fc0e67055dc277728c7fefa73b/info
Found 1 items
-rw-r--r--   3 hadoop supergroup       1259 2020-08-30 21:10 /hbase/data/default/pk_hbase_java_api/d36985fc0e67055dc277728c7fefa73b/info/030808b5981b4a19ae2d6c4a9372ec12
此目录和上图结构一一对应。
namespace: default
table: pk_hbase_java_api
region: d36985fc0e67055dc277728c7fefa73b
CF: info
HFile: 030808b5981b4a19ae2d6c4a9372ec12

由此可见,HFile文件写入的是一个列簇的数据。
HFile文件的一行为:Row-key,CF,字段名称,value。
在这里插入图片描述当用户按照 Row-key 查询数据的时候,HBase 会遍历两个CF中的HFile,通过相同的 Row-Key 标识,将相关的单元格组织成行返回,这样便有了逻辑上的行数据。

系统自动创建的两张表meta和namespace在名为hbase的namespace下:

[hadoop@hadoop000 ~]$ hadoop fs -ls /hbase/data/hbase
Found 2 items
drwxr-xr-x   - hadoop supergroup          0 2020-02-05 16:56 /hbase/data/hbase/meta
drwxr-xr-x   - hadoop supergroup          0 2020-02-05 16:56 /hbase/data/hbase/namespace

四.参考文章

  1. HBase 深入浅出
  2. HBase是如何存储的
  3. HBase meta表介绍
  4. Hbase 查看 rowkey在哪个region中
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值