讀流程
- Client先訪問zookeeper,從meta表讀取region的位置,然後讀取meta表中的數據。meta中又存儲了用戶表的region信息;
- 根據namespace、表名和rowkey在meta表中找到對應的region信息;
- 找到這個region對應的regionserver;
- 查找對應的region;
- 先從MemStore找數據,如果沒有,再到BlockCache裏面讀;
- BlockCache還沒有,再到StoreFile上讀(爲了讀取的效率);
- 如果是從StoreFile裏面讀取的數據,不是直接返回給客戶端,而是先寫入BlockCache,再返回給客戶端。
寫流程
- Client向HregionServer發送寫請求;
- HregionServer將數據寫到HLog(write ahead log)。爲了數據的持久化和恢復;
- HregionServer將數據寫到內存(MemStore);
- 反饋Client寫成功。
數據flush過程
- 當MemStore數據達到閾值(默認是128M,老版本是64M),將數據刷到硬盤,將內存中的數據刪除,同時刪除HLog中的歷史數據;
- 並將數據存儲到HDFS中;
- 在HLog中做標記點。
數據合併過程
- 當數據塊達到3塊,Hmaster觸發合併操作,Region將數據塊加載到本地,進行合併;
- 當合並的數據超過256M,進行拆分,將拆分後的Region分配給不同的HregionServer管理;
- 當HregionServer宕機後,將HregionServer上的hlog拆分,然後分配給不同的HregionServer加載,修改.META.;
- 注意:HLog會同步到HDFS。
簡書:https://www.jianshu.com/u/0278602aea1d
CSDN:https://blog.csdn.net/u012387141