Hbase学习之读流程解析

  1. 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地址与端口等存储。

  2. 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的读路径。

  3. 读路径解析
    客户端读取数据有俩种方式:GET与Scan。Get是一种随机点查的方式,根据rowKey返回一行数据,也可以在构造Get对象的时候传入一个rowKey列表,这样一次RPC请求可以返回多条数据。Get对象可以设置列与filter,只获取特定rowkey下的指定列的数据。Scan是范围查询,通过指定Scan对象的start Row与endRow来确定一次扫描的数据范围,获取该区间的所有数据。


    由客户端发起的完成的读流程,可以分为两个阶段:第一个阶段是客户端如何将请求发送到正确的Region Server上,第二个阶段是Region Server如何处理读取请求。

  4. 客户端如何发送请求到指定的 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),至此,客户端定位发送请求的流程走通

  5. RegionServer 处理读请求

    首先在 RegionServer 端,将 Get 请求当做特殊的一次 Scan 请求处理,其 startRow 和 StopRow 是一样的,所以介绍 Scan 请求的处理就可以明白 Get 请求的处理流程了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值