微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

详解hbase的寻址过程(0.96版本以后,2.0版本以前)

客户端发送查询命令

scan 'user', {COLUMNS => 'base_info', STARTROW => 'rk1', ENDROW => 'rk3'}

寻址过程

1. 客户端请求zk,获取Meta表所在位置

2. zk返回节点位置(假设在hadoop01节点)

3. 客户端访问hadoop01节点上的Meta

Meta表存放的就是region的元数据信息。Meta表格式如下:

ROW                                                           COLUMN+CELL
user,,1577522582939.b84a96d0e074272569b6fa79946e79df.    column=info:regioninfo, timestamp=1577522584346, value={ENCODED => b84a96d0e074272569b6fa79946e79df, NAME => 'user,,1577522582939.b84a96d0e074272569b6fa79946e79df.', STARTKEY => '', ENDKEY => ''}

user,,1577522582939.b84a96d0e074272569b6fa79946e79df.    column=info:seqnumDuringOpen, timestamp=1583992456271, value=\x00\x00\x00\x00\x00\x00\x00[

user,,1577522582939.b84a96d0e074272569b6fa79946e79df.    column=info:server, timestamp=1583992456271, value=hadoop01:16020

user,,1577522582939.b84a96d0e074272569b6fa79946e79df.    column=info:serverstartcode, timestamp=1583992456271, value=1583992398626

ROW

hbase:Meta表的一个rowkey就对应一个region

hbase:Meta 表的 rowkey 结构如下:

TableName,StartKey,Timestamp.Encodedname.
  • TableName:表名称
  • StartKey:表示当前 table 的 region 中存储的第一个 rowkey。如果这个地方为空的话,表明这是 table 的第一个 region。并且如果一个 region 中 StartKey 和 EndKey 都为空的话,表明这个 table 只有一个 region;比如上面的user表就只有一个region( STARTKEY => '', ENDKEY => '')。
  • Timestamp:region 创建的时间戳
  • Encodedname:TableName,StartKey,Timestamp字符串的MD5 Hex值。

COLUMN+CELL

每一行数据又分为4列,分别是info:regioninfo、info:seqnumDuringOpen、info:server、info:serverstartcode。

info:regioninfo:该列对应的 Value 主要存储4个信息,即Encodedname、RegionName、Region的StartRow、Region的EndRow。

info:seqnumDuringOpen:该列对应的 Value 主要存储Region打开时的sequenceId。

info:server:该列对应的 Value 主要存储Region落在哪个RegionServer上。

info:serverstartcode:该列对应的 Value 主要存储所在RegionServer的启动Timestamp。

因此,通过Meta表,客户端就知道所要查询的数据放在哪个RegionServer上的哪个region。本例子返回的就是RegionServer1中的region1。

4. 根据返回的节点信息和region信息,到相应的位置查询数据

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐