一、HBase数据检索流程
一篇介绍HBase数据读写流程的解析的博文:http://hbasefly.com/2016/12/21/hbase-getorscan/?wsfatm=uqvhl3
1、命名空间
##查看命名空间
hbase(main):001:0> list_namespace
NAMESPACE
2019-05-21 13:31:59,854 WARN [main] util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
default
hbase
##查看命名空间下的表
hbase(main):003:0> list_namespace_tables 'hbase'
TABLE
meta
namespace
2 row(s) in 0.0260 seconds
##查看某个命名空间下的表数据
hbase(main):004:0> scan 'hbase:meta'
2、数据检索流程
#####
由图可以看出,存储模块主要包括了ZooKeeper集群、HMaster、HRegionServer。
ZooKeeper: Hbase是强依赖于ZooKeeper,我们读或写一个表的数据,都会优先访问ZooKeeper。
通常是集群中单独的3/5台服务器。
HMaster通常是Hadoop集群中的一台或两台(backup-Master)。
HRegionServer通常是Hadoop集群中的部分或全部, HRegionServer通常和datanode部署在同一台服务器上,比如datanode是10个HRegionServer可以是10个或小于10个;
##client--->server
1、客户端首先会根据配置文件中zookeeper地址连接zookeeper,并读取/<hbase-rootdir>/meta-region-server节点信息,该节点信息存储HBase元数据(hbase:meta)表所在的RegionServer地址以及访问端口等信息。用户可以通过zookeeper命令(get /<hbase-rootdir>/meta-region-server)查看该节点信息。
2、根据hbase:meta所在RegionServer的访问信息,客户端会将该元数据表加载到本地并进行缓存。然后在表中确定待检索rowkey所在的RegionServer信息。
3、根据数据所在RegionServer的访问信息,客户端会向该RegionServer发送真正的数据读取请求。服务器端接收到该请求之后需要进行复杂的处理,具体的处理流程将会是这个专题的重点。
通过上述对客户端以及HBase系统的交互分析,可以基本明确两点:
1、客户端只需要配置zookeeper的访问地址以及根目录,就可以进行正常的读写请求。不需要配置集群的RegionServer地址列表。
2、客户端会将hbase:meta元数据表缓存在本地,因此上述步骤中前两步只会在客户端第一次请求的时候发生,之后所有请求都直接从缓存中加载元数据。如果集群发生某些变化导致hbase:meta元数据更改,客户端再根据本地元数据表请求的时候就会发生异常,此时客户端需要重新加载一份最新的元数据表到本地。