- hbase读写流程
读过程
- client先从缓存中定位region位置,如果缓存中没有region位置,则从zookeeper的-ROOT-表,获取-ROOT-所在regionserver位置
- 通过查询-ROOT-的region服务器获取含有.META.表所在regionserver地址
- Client会将保存着regionserver位置信息的元数据表.META.进行缓存,然后在表中确定待检索rowkey所在regionserver信息。
- Client会向在.META.表中确定的regionserver发送真正的数据读取请求
- 先从memstore中查找,如果没有再到storefile中查找
写过程
- client先从缓存中定位region,如果缓存中没有region位置信息则需要访问zookeeper,从.META.表获取要写入的region信息
- 找到小于rowkey并且最接近rowkey的startkey对应的region
- 将更新的数据首先写入WAL(HLog)防止中途发生宕机也可以通过WAL还原初始数据
- 将更新写入memstore中,当memstore的大小达到设定的flush memstore的阈值时,会触发flush memstore操作,把memstore的数据写入到hdfs,生成一个HFile文件
- 随着HFile文件的不断增多,当达到一定的阈值之后,触发Compact合并操作(分为两种minor Compaction、major Compaction)
- HFile文件通过不断的compact合并操作,逐步形成越来越大的storefile
- 当单个storefile大小超过一定的阈值后,触发split操作,把当前的region拆分为两个,新拆分的region会被hbase master分配到相应的两个regionserver上