版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/James__Tao/article/details/78106359
1、client先去访问zookeeper,从zookeeper上获取meta表的位置信息
以前的版本hbase的系统表除了meta表还有root表
在root表中存储了meta表的位置信息
新版本中将meta表的位置信息直接存入zookeeper中
2、client向meta表的region所在的regionserver发起访问,读取meta表的数据,获取了hbase集群上所有的表的元数据
3、根据meta表的元数据信息(某张表有几个region及region如何分配及每个reigon的startkey和stopkey),client找到当前要写入的表对应的region及所在regionserver信息
4、 client向对应的regionserver发起写入请求
5、regionserver收到client请求并响应,client先把数据写入到Hlog防止数据丢失
6、再把数据写入到memstore内存缓存区(默认大小128M)
7、当数据写入到Hlog及memstore内存缓存区都成功时,写入才算成功
8、当memstore达到128M或其他的因素的触发,会将memstore中的数据flush成storeFile
9、当storeFile越来越多,会触发compact合并,将多个storeFile文件最终合并成一个文件
合并分为minor compact 和 major compact
在大合并期间打上‘删除’标签的cell或者过期的cell会被统一清理
10、当某个store下的storeFile文件的最终合并后的大小达到10G时,会触发整个region的split分割,一个region一分为二,由master进行分配