查看: 73|回复: 1

HBASE的读写过程

[复制链接]
新浪微博达人勋 poiu72  未实名认证
论坛徽章:
21
SAS研习者初级
日期:2012-08-20 22:27:43Hive徽章
日期:2017-03-10 11:59:23HBase徽章
日期:2017-03-10 12:01:24Java徽章
日期:2017-06-09 15:42:21storm徽章
日期:2017-07-20 17:23:53python徽章
日期:2017-09-07 16:20:32Java徽章
日期:2018-02-08 16:11:57知识图谱徽章
日期:2018-06-15 13:47:35pyspark徽章
日期:2018-09-06 14:49:50python徽章
日期:2017-03-02 16:33:17python徽章
日期:2016-11-03 17:46:49spark徽章
日期:2016-10-27 10:50:12
发表于 2019-6-9 21:13 | 显示全部楼层 |阅读模式

存储

读请求过程:
1 客户端通过zookeeper以及root表和meta表找到目标数据所在的regionserver
2 联系regionserver查询目标数据
3 regionserver定位到目标数据所在的region,发出查询请求
4 region先在memstore中查找,命中则返回
5 如果在memstore中找不到,则在storefile中扫描(可能会扫描到很多的storefile----bloomfilter)
写请求过程:
1 client向region server提交写请求
2 region server找到目标region
3 region检查数据是否与schema一致
4 如果客户端没有指定版本,则获取当前系统时间作为数据版本
5 将更新写入WAL log
6 将更新写入Memstore
7 判断Memstore的是否需要flush为Store文件。
细节描述:
HBase使用MemStore和StoreFile存储对表的更新。
数据在更新时首先写入Log(WAL log)和内存(MemStore)中,MemStore中的数据是排序的,当MemStore累计到一定阈值时,就会创建一个新的MemStore,并 且将老的MemStore添加到flush队列,由单独的线程flush到磁盘上,成为一个StoreFile。于此同时,系统会在zookeeper中记录一个redo point,表示这个时刻之前的变更已经持久化了。
当系统出现意外时,可能导致内存(MemStore)中的数据丢失,此时使用Log(WAL log)来恢复checkpoint之后的数据。
StoreFile是只读的,一旦创建后就不可以再修改。因此Hbase的更新其实是不断追加的操作。当一个Store中的StoreFile达到一定的阈值后,就会进行一次合并(minor_compact,major_compact),将对同一个key的修改合并到一起,形成一个大的StoreFile,当StoreFile的大小达到一定阈值后,又会对 StoreFile进行split,等分为两个StoreFile。
由于对表的更新是不断追加的,compact时,需要访问Store中全部的 StoreFile和MemStore,将他们按row key进行合并,由于StoreFile和MemStore都是经过排序的,并且StoreFile带有内存中索引,合并的过程还是比较快。


回复

使用道具 举报

论坛徽章:
0
发表于 2019-6-12 10:57 | 显示全部楼层
感谢分享在原理机制上更加理解了hbase后续相关调优也可以在改方面进行优化
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册 新浪微博登陆

本版积分规则

 

GMT+8, 2019-6-24 22:25 , Processed in 0.113302 second(s), 31 queries .

关闭

扫一扫加入
本版微信群