Hbase读写数据流程
前言
学习大数据过程中记下的一些笔记以下是本篇文章正文内容,下面案例可供参考
行键 的重要性 —> 1) 唯一标识 2) 排序 3) 索引 4) 实施布隆过滤器 5) 行级事务
写数据流程
写数据流程(put为例)
1、客户端请求Zookeeper插入数据put ‘a’,‘rk001’,‘cf:age’,‘21’
2、zookeeper返回客户端元数据在哪个region server
3、客户端请求返回的regionserver下载元数据(为什么要下载,而不是读数据,读数据不是比下载快?因为下载后会将元数据缓存到客户端内存中,下次再有相同需求时直接用缓存的数据操作)
4、客户端下载缓存,解析下载到的元数据,得到region所在的位置(hostname,regionname)
5、请求regionserver写数据,a表->包含rk001的的region->store(cf1)->MemoryStore(128M)
6、边将数据写到内存中,一边向hdfs写日志文件(避免region server宕机,内存中的数据丢失) MemoryStore(默认内存中的数据达到128M刷新一次)->flush刷新->生成多个storefile文件(逻辑上的,不是真正的文件),一个storefile对应HDFS中一个hfile文件。storefile和hfile可以看成一个东西,storefile是逻辑上的,hfile是物理上的
flush时机:
1、一个MemoryStore达到128M
2、手动刷新
3、机器内存到达阈值,所有的MemoryStore刷新
4、写操作达到一定的次数
读数据流程
读数据流程(get为例)
1、客户端请求Zookeeper插入数据get ‘a’,‘rk001’
2、zookeeper返回客户端元数据的位置
3、客户端请求返回的region server下载元数据
4、客户端下载缓存,解析下载到的元数据,得到region所在的位置(hostname,regionname)
5、请求region server读数据
1)一个regionserver中只有一个BlockCache, 读取数据的时候先在BlockCache,缓存块中获取数据,找到返回;
2)如果没有在BlockCache获取到数据,再进行内存和Hfile中的检索 ,如果有数据直接返回,当获取到数据以后再将数据写入BlockCache缓存起来,方便下次读取的时候提高效率。在Hfile中查找时,会***布隆过滤器***快速找到并返回。