Hbase 读取数据流程:
1 、首先, Client 先访问 zookeeper ,获取系统 'hbase:meta' 元数据表的 region 信息和 HRegionServer 信息(确定 'hbase:meta' 元数据表的位置),从而获取到 'hbase:meta' 元数据表
2 、其次,根据 namespace 、 tablename 、 rowkey ,在 'hbase:meta' 元数据表查找对应的的 Region 信息和 HRegionserver 信息
3 、最后,根据已经获取到的 regionserver 和 region 信息,去 regionserver 节点上查找数据,先从 memstore 读取,如果没有,再到 storeFile 上读取(为了读取的效率)
从这个过程可以看出,真正的读写并不依赖于 master ,在读写的过程中如果 master 节点出现宕机,短暂性的是不会出现太大的问题
Hbase 写入数据流程:
1 、当客户端发起一个 Put 请求时,首先它从 hbase:meta 表中查出该 Put 数据最终需要去的 HRegionServer ;然后客户端将 Put 请求发送给相应的 HRegionServer ,在 HRegionServer 中它首先会将该 Put 操作写入 WAL 日志;
2 、写完 WAL 日志文件后, HRegionServer 根据 Put 中的 TableName 和 RowKey 找到对应的 HRegion ,并根据 Column Family 找到对应的 HStore ,并将 Put 写入到该 HStore 的 MemStore 中,此时写成功,并返回通知客户端。