hbase读写过程

HBase数据的写入过程:

1、Client访问zookeeper,获取元数据存储所在的regionserver

2、通过刚刚获取的地址访问对应的regionserver,拿到对应的表存储的regionserver

3、去表所在的regionserver进行数据的添加

4、查找对应的region,在region中寻找列族,先向memstore中写入数据

5、当memstore写入的值变多,触发溢写操作(flush),进行文件的溢写,成为一个StoreFile

6、当溢写的文件过多时,会触发文件的合并(Compact)操作,合并有两种方式(major,minor)

多个StoreFile合并成一个StoreFile,同时进行版本合并和数据删除

minor compaction:小范围合并,默认是3-10个文件进行合并,不会删除其他版本的数据。

major compaction:将当前目录下的所有文件全部合并,一般手动触发,会删除其他版本的数据(不同时间戳的)

7、当region中的数据逐渐变大之后,达到某一个阈值,会进行裂变(一个region等分为两个region,并分配到不同的regionserver),原本的Region会下线,新Split出来的两个Region会被HMaster分配到相应的HRegionServer上,使得原先1个Region的压力得以分流到2个Region上。

HBase数据的读取过程:

(1)Client访问zookeeper,获取hbase:meta所在RegionServer的节点信息

(2)Client访问hbase:meta所在的RegionServer,获取hbase:meta记录的元数据后先加载到内存中,然后再从内存中根据需要查询的RowKey查询出RowKey所在的Region的相关信息(Region所在RegionServer)

(3)Client访问RowKey所在Region对应的RegionServer,发起数据读取请求

(4)RegionServer构建RegionScanner(需要查询的RowKey分布在多少个Region中就需要构建多少个RegionScanner),用于对该Region的数据检索

(5)RegionScanner构建StoreScanner(Region中有多少个Store就需要构建多少个StoreScanner,Store的数量取决于Table的ColumnFamily的数量),用于对该列族的数据检索

(6)多个StoreScanner合并构建最小堆(已排序的完全二叉树)StoreHeap:PriorityQueue

(7)StoreScanner构建一个MemStoreScanner和一个或多个StoreFileScanner(数量取决于StoreFile数量)

(8)过滤掉某些能够确定所要查询的RowKey一定不在StoreFile内的对应的StoreFileScanner或MemStoreScanner

(9)经过筛选后留下的Scanner开始做读取数据的准备,将对应的StoreFile定位到满足的RowKey的起始位置

(10)将所有的StoreFileScanner和MemStoreScanner合并构建最小堆KeyValueHeap:PriorityQueue,排序的规则按照KeyValue从小到大排序

(11)从KeyValueHeap:PriorityQueue中经过一系列筛选后一行行的得到需要查询的KeyValue。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值