-
Hbase简介
Hbase是一个分布式,可扩展,面向列的适合存储海量数据的数据库,其中主要的功能是解决海量数据下的实时随机读写的问题,通常Hbase依赖HDFS作为底层分布式文件系统。
1.1Hbase关键进程
Hbase是一个Master/Slave架构的分布式数据库,内部主要有Master,RegionServer两个核心服务,依赖HDFS做底层存储,依赖zookeeper做一致性等协调工作。
Master是一个轻量级进程,负责所有DDL操作,负载均衡,region信息管理,并在宕机恢复中起主导作用。
Region Server 管理HRegion,与客户端点对点通信,负责实时数据的读写。
zookeeper做HMaster选举,关键信息如meta-region地址,replication进度,Region server地址与端口等存储。 -
2Hbase架构
、
架构浅析:Hbase数据存储基于LSM架构,数据先顺序写入HLog,默认情况下Region Server只有一个Hlog实例,之后再写入HRegion的MemStore之中。HRegion是一张HBase表的一块数据连续的区域,数据按照rowkey字典序排序,Region Server管理这些HRegion。当MemStore达到阈值时触发flush操作,刷写为一个HFile 文件,众多HFile文件会周期性进行minor compaction和major compaction合并成大文件。所有HFile与日志文件都存储在HDFS之上。
到此,Hbase的关键组件和它的角色以及架构有了一个大体的认识,下面重点介绍HBase的读路径。
-
读路径解析
客户端读取数据有俩种方式:GET与Scan。Get是一种随机点查的方式,根据rowKey返回一行数据,也可以在构造Get对象的时候传入一个rowKey列表,这样一次RPC请求可以返回多条数据。Get对象可以设置列与filter,只获取特定rowkey下的指定列的数据。Scan是范围查询,通过指定Scan对象的start Row与endRow来确定一次扫描的数据范围,获取该区间的所有数据。由客户端发起的完成的读流程,可以分为两个阶段:第一个阶段是客户端如何将请求发送到正确的Region Server上,第二个阶段是Region Server如何处理读取请求。
-
客户端如何发送请求到指定的 RegionServer
HRegion 是管理一张表一块连续数据区间的组件,而表是由多个 HRegion 组成,同时这些 HRegion 会在 RegionServer 上提供读写服务。所以客户端发送请求到指定的 RegionServer 上就需要知道 HRegion 的元信息,这些元信息保存在 hbase:meta 这张系统表之内,这张表也在某一个 RegionServer 上提供服务,而这个信息至关重要,是所有客户端定位 HRegion 的基础所在,所以这个映射信息是存储在 zookeeper 上面。
客户端获取 HRegion 元信息流程图如下:
我们以单条 rowkey 的 Get 请求为例,当用户初始化到 zookeeper 的连接之后,并发送一个 Get 请求时,需要先定位这条 rowkey 的 HRegion 地址。如果该地址不在缓存之中,就需要请求 zookeeper (箭头1),询问 meta 表的地址。在获取到 meta 表地址之后去读取 meta 表的数据来根据 rowkey 定位到该 rowkey 属于的 HRegion 信息和 RegionServer 的地址(箭头2),缓存该地址并发 Get 请求点对点发送到对应的 RegionServer(箭头3),至此,客户端定位发送请求的流程走通 -
RegionServer 处理读请求
首先在 RegionServer 端,将 Get 请求当做特殊的一次 Scan 请求处理,其 startRow 和 StopRow 是一样的,所以介绍 Scan 请求的处理就可以明白 Get 请求的处理流程了。
Hbase学习之读流程解析
最新推荐文章于 2022-03-01 13:43:02 发布