Hbase读数据流程

一、读数据流程

1.在客户端输入一个指令  get "a" ,"rk0010"  请求到 zookeeper的/hbase/META(META标位置)

2.返回记录表数据位置的meta表的机器,交给客户端

3.客户端请求regionserver2(加入meta返回数据告诉数据在region中储存)  下载meta表(我也有点不太清楚,可能是meta表在regionserver中也存在一份?)

4.将meta表返回给客户端

5.缓存  (345步待考证)

6.从meta表中得到对应的region机器,请求该机器

    将写入的数据存放在regionserver中的对应region的列族中,每个regionserver中都有很多region,每个region中都有自己对应的startKey~endKey,对应的region中存在着很多列族,但是每个列族中都有自己的内存区(MemeryStroe),读数据的时候都会先从内存区中查询,如果没有数据就会去缓存区(CatchBlock)查找,当缓存中还是没有数据的时候就回去hdfs中查找,为了在储存大量数据的hdfs中快速寻找到数据,会通过布隆过滤器快速过滤出数据存储在哪,然后返回给缓存,再返回给客户端

二、布隆过滤器简介

    想要在hdfs中查询数据,如果每条数据都读到才能查询到数据,速度会非常地慢,所以选用了布隆过滤器

    布隆过滤器的底层原理在图中右半部分进行简单阐述,布隆过滤器可以确定数据绝对不在这个文件中,但是不能准确判断是否存在某几个文件中(有可能出现hash冲撞)

    查询数组中的值,是通过index查询,在hashmap中查询value,只通过key键查询.布隆过滤器采用了类似于hashmap的方法,查询数据.在布隆过滤器中,计算出row键的hash值(在这个过程中可能会出现hash冲撞).在对应的hfile文件中创建一个表格,在这个表格中在没有数据的时候,所有的字节全部为零,在hfile中每插入一条数据,在这个表格中,就会插入一个数据row键对应的hash值,在这个hash值对应的字节上将0变为1,当读数据的时候,只会查询这个表格,如果字节为1的hash值中没有读到对应的数据,就能确定这个hfile中并不存在这条数据.这样做将大大减少搜寻数据的时间.

本文为作者粗略地学习笔记,如果读者有不同意见,欢迎并感谢指正,一同交流,一同进步!!!!

    

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值