寫操作流程
(1) Client通過Zookeeper的調度,向RegionServer發出寫數據請求,在Region中寫數據。
(2) 數據被寫入Region的MemStore,直到MemStore達到預設閾值。
(3) MemStore中的數據被Flush成一個StoreFile。
(4) 隨着StoreFile文件的不斷增多,當其數量增長到一定閾值后,觸發Compact合並操作,將多個StoreFile合並成一個StoreFile,同時進行版本合並和數據刪除。
(5) StoreFiles通過不斷的Compact合並操作,逐步形成越來越大的StoreFile。
(6) 單個StoreFile大小超過一定閾值后,觸發Split操作,把當前Region Split成2個新的Region。父Region會下線,新Split出的2個子Region會被HMaster分配到相應的RegionServer上,使得原先1個Region的壓力得以分流到2個Region上。
可以看出HBase只有增添數據,所有的更新和刪除操作都是在后續的Compact歷程中舉行的,使得用戶的寫操作只要進入內存就可以立刻返回,實現了HBase I/O的高機能。
讀操作流程
(1) Client訪問Zookeeper,查找-ROOT-表,獲取.META.表信息。
(2) 從.META.表查找,獲取存放目標數據的Region信息,從而找到對應的RegionServer。
(3) 通過RegionServer獲取需要查找的數據。
(4) Regionserver的內存分為MemStore和BlockCache兩部分,MemStore主要用於寫數據,BlockCache主要用於讀數據。讀請求先到MemStore中查數據,查不到就到BlockCache中查,再查不到就會到StoreFile上讀,並把讀的結果放入BlockCache。
尋址過程:client-->Zookeeper-->-ROOT-表-->.META.表-->RegionServer-->Region-->client
Hbase尋址機制