写流程
Hbase使用memstore和storefile存储,Hbase只有增加数据,所有的更新和删除操作都是在后续的合并中进行,使得用户在写操作只要进入内存就立即返回实现Hbase高速存储
1、client通过zookeeper的调度,向regionServer发出写数据请求,在Region中写数据
2、数据首先是写入HLog和memstore,memstore的数据是有序的,当memstore达到阈值后就会生成一个新的memstrore
3、老的memstore就会被添加进一个flush队列,由单独的线程flush到磁盘中,同时zookeeper会记录下一个checkpoint点
4、随着storefile文件不断的增多,当数量到达阈值后就会进行合并操作,对相同的key的修改合并到一起,版本合并和数据删除形成 一个大的storefile。
5、当系统发生意外时候,可能导致memstore数据丢失,会从HLog中恢复上一个checkpoint点之后的数据。
注意:Storefile是只读的,一旦创建之后就不可修改。因此hbase的更新就是不断追加的操作。当一个store的storefile达到一定的阀值后,就会进行一次合并操作,将对同一个key的修改合并到一起,同时进行版本合并和数据删除,形成一个大的storefile。当storefile的大小达到一定的阀值后,又会对storefile进行切分操作,等分为两个storefile。
读流程
zookeeper存储hbase数据信息的表
1、client如果在缓存中没有找到region节点信息 就会请求zookeeper 查找 hbase表,查找meta-region-server(后面皆以meta表示)表,获取region位置信息,从而找到相应的RegionServer,查询过的region会放在client缓存里 并且该缓存不会主动删除
2、通过RegionServer查找响应的数据
3、RegionServer的内存分为memstore和BlockCache两部份,其中memstore是用来写数据的,BlockCache主要用来读数据,读数据首先往memstore 查找,如果memstore也查找不到数据 就会往BlockCache查找 再查找不到就会往storefile查找,并将查找到的数据存放在BlockCache
1、BlockCache是Region Server级别的,
2、一个Region Server只有一个Block Cache,在Region Server启动的时候完成Block Cache的初始化工作。