Hbase读流程
读流程:
- Client 先访问 zookeeper,从 meta 表读取 region 的位置,然后读取 meta 表中的数据。meta 中又存储了用户表的 region 信息;
- 根据 namespace、表名和 rowkey 在 meta 表中找到对应的 region 信息;
- 找到这个 region 对应的 regionserver;
- 查找对应的 region;
- 先从 BlockCache 找数据,如果没有,再到 MemStore 里面读;
- MemStore 还没有,再到 StoreFile 上读(为了读取的效率);
- 如果是从 StoreFile 里面读取的数据,不是直接返回给客户端,而是先写入 BlockCache,再 返回给客户端
Hbase写流程
写流程:
1.Client 先访问 zookeeper,找到 Meta 表,并获取 Meta 表元数据。
2.确定当前将要写入的数据所对应的 HRegion 和 HRegionServer 服务器。
3. Client 向该 HRegionServer 服务器发起写入数据请求,然后HRegionServer 收到请求并响应。
4. Client 先把数据写入到 HLog,以防止数据丢失。
5. 然后将数据写入到 Memstore。
6. 如果 HLog 和 Memstore 均写入成功,则这条数据写入成功
7. 如果 Memstore 达到阈值,会把 Memstore 中的数据 flush 到 Storefile 中。
8. 当 Storefile 越来越多,会触发 Compact 合并操作,把过多的 Storefile 合并成一个大的 Storefile。
9. 当 Storefile 越来越大,Region 也会越来越大,达到阈值后,会触发 Split 操作,将Region 一分为二。