大数据之hbase_hbase的原理加强读写数据流程

写数据流程

1.客户端请求写入一条数据,会先向ZK发起请求,并给到ZK表名,行键,列族,属性,值等信息

2.ZK接收到请求,返回给客户端META表的位置信息,(META表中记录了region的个数,及每个region的大小和数据的起始位置等信息)

3.客户端拿到META表的位置信息,就会去到对应的regionserver请求META表数据,(假如META表的元数据中没有row_key的范围信息,就会去请求HMaster分配新的row_key的范围信息)

4.regionserver将META表数据给到客户端,客户端就会解析该数据,判断自己这条信息该存到哪个位置(哪个region里面去),在解析的时候,还会将该条要存储的信息的存储位置缓存起来,方便下次再次存储时,可以快速找到存储位置.

5.客户端拿到存储位置后,就会向对应的regionserver发起put请求,然后将数据写入到对应的region中,在region中会按列族cf1(Store)划分区域,且往列族中写数据时,实际上是写入了MemStore(内存)中.

6.在写数据的过程中,可能会发生宕机的可能,为解决此问题,在写数据时,会生成用户操作行为的日志文件,当宕机后,日志中记录的数据,可以直接导入到hdfs中(生成WALS日志文件),保证数据不会丢失.

7.当写入的数据足够多的时候,就会启动flush,生成storefile文件,storefile就会调用hdfs客户端, 将storefile文件flush到hdfs中,生成hfile文件.当hfile文件生成后,WALS就会生成oldWALS,过一段时间就会自动删除oldWALS.这样即保证了数据的安全性,又节省了储存空间.

8.flush时机:
1)手动强制刷新
2)单个memStore达到阈值(默认128M)
3)单个regionserver的总内存达到阈值
4)单日志记录的次数达到阈值(100万)
在这里插入图片描述

读数据流程

1.客户端发起读数据请求,将想要读取的表信息,行信息等发送给ZK集群
2.ZK接收到请求后,将META表(储存着元数据信息的表)的位置返回给客户端
3.客户端将META表的位置信息解析处理,并缓存到本地,方便下次查询时可以直接访问,解析并缓存后就去请求储存着META表的节点下载META表信息
4.下载到META表后,就获得了要读取的表的位置及region的位置,然后就去请求对应的regionserver读取数据
5.1读取数据时,会先查看该regionserver的内存中是否有我们想要的数据,如果有,就将数据读取到该regionserver缓存中(CacheStore),然后再将数据返回给客户端
5.2如果内存中没有数据,就会去缓存中查找,如果找到了,也可以直接返回给客户端
5.3如果内存中和缓存区中都没有数据,那么此时就需要区hdfs中读取数据,取到数据后,先将数据存到该regionserver缓存中,然后将数据返回给客户端

6.去hdfs中读取数据时,hdfs的regionname/列族文件夹中往往会存储大量的hfile文件,那么我们想要确定哪个文件中有我们想要读取的数据,就只能一个一个的遍历查找,这样的话效率必定很低,因此引入了布隆过滤器
布隆过滤器:利用文件上很小的一部分空间,来换取快速的判断这个文件绝不会存在或极有可能存在你要的数据的一种算法
该算法是在文件的底部放入一排二进制的字节数组,例如放入一亿个,起始都为0,当有一行数据存入到此文件中时,就将行键通过hash算法转换成一串数字,然后将该数字位置所对应的0变成1,这样当我们过来读取数据时,就会先到每个文件中看我这个行键通过hash算法后的这串数字所对应的位置上是0还是1.如果是0,那么该文件中肯定没有我们想要的数据,如果是1,则可能有我们想要的数据,因为通过hash算法后可能将两个行键算出同一个值(这个叫hash碰撞),如果有两个1,那么就遍历这两个文件找到我们想要读取的数据
另外每个hfile文件的布隆过滤器的上面还有一排索引(index_block),索引可以帮我们快速定位到过滤后的数据的位置.
通过布隆过滤器和索引就能帮我们在hdfs中快速的找到我们想要读取的数据,
在hbase查询数据时,使用行键查询会非常的快,因为:
1)hbase会自动按行键进行排序
2)布隆过滤器
3)index索引
4)数据可能在内存中或缓存中
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值