HBase读写流程

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/HaixWang/article/details/79520141

读流程:

读流程概览:

1.首先,客户端需要获知其想要读取的信息的Region的位置,这个时候,Client访问hbase上数据时并不需要Hmaster参与(HMaster仅仅维护着table和Region的元数据信息,负载很低),只需要访问zookeeper,从meta表获取相应region信息(地址和端口等)。【Client请求ZK获取.META.所在的RegionServer的地址。】

2.客户端会将该保存着RegionServer的位置信息的元数据表.META.进行缓存。然后在表中确定待检索rowkey所在的RegionServer信息(得到持有对应行键的.META表的服务器名)。【获取访问数据所在的RegionServer地址】

3.根据数据所在RegionServer的访问信息,客户端会向该RegionServer发送真正的数据读取请求。服务器端接收到该请求之后需要进行复杂的处理。

4.先从MemStore找数据,如果没有,再到StoreFile上读(为了读取的效率)。

这里写图片描述[1]

这里写图片描述[2]

注:
1.客户端只需要配置zookeeper的访问地址以及根目录,就可以进行正常的读写请求。不需要配置集群的RegionServer地址列表。
2.在Hbase 0.96版本以前,Hbase有两个特殊的表,分别是-ROOT-表和.META.表,其中-ROOT-的位置存储在ZooKeeper中,-ROOT-本身存储了 .META. Table的RegionInfo信息,并且-ROOT-不会分裂,只有一个region。而.META.表可以被切分成多个region。0.96版本以后将-ROOT-表去掉了。

详细叙述:

见文章:HBase数据读取流程解析,写得很详细

写流程:

写流程概览:

普通操作是HBase中最核心、效率最高的操作。具体的写入操作分为客户端和服务器端两个部分。

前三点和读类似:
1.Client先访问zookeeper,从.META.表获取相应region信息,然后从meta表获取相应region信息
2.根据namespace、表名和rowkey根据meta表的数据找到写入数据对应的region信息
3.找到对应的regionserver
把数据先写到WAL中,即HLog,然后写到MemStore上
4.MemStore达到设置的阈值后则把数据刷成一个磁盘上的StoreFile文件。
5.当多个StoreFile文件达到一定的大小后(这个可以称之为小合并,合并数据可以进行设置,必须大于等于2,小于10——hbase.hstore.compaction.max和hbase.hstore.compactionThreshold,默认为10和3),会触发Compact合并操作,合并为一个StoreFile,(这里同时进行版本的合并和数据删除。)
6.当Storefile大小超过一定阈值后,会把当前的Region分割为两个(Split)【可称之为大合并,该阈值通过hbase.hregion.max.filesize设置,默认为10G】,并由Hmaster分配到相应的HRegionServer,实现负载均衡

详细叙述:

TODO:待实战需要优化时在深入学习,不然学了也忘——学而不思则罔。

参考:

[1]简书-飞鸿无痕:Hbase技术详细学习笔记
[2]HBase数据读取流程解析
2.HBase企业应用开发实战

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值