Hbase 總體框架
注意點
1 客戶端如果是針對數據的增刪改查(DML)那麼不需要經過HMaster
2 每一個store是一個文件夾,存儲的是一個列族在這個regin下的數據;flush就會在hdfrs上store文件夾形成一個HFile文件,這樣時間久了會有很多小文件,後面會有針對這些小文件的合併和split。
3 Hlog操作日誌是實時落盤的,真正的內存數據是flush時落盤HFile
1 Hbase寫數據流程1
寫數據是先寫Hlog,實時落盤,之後再寫入內存,但是Hlog寫入也是事務的,如果日誌存儲失敗,內存中的數據也會一併刪除。
2 Hbase讀數據流程1
讀數據流程在具體的reginserver上,是讀storeFile+MemStore+BlockCache一塊讀取,然後看時間戳最新的rowkey的記錄。但是因爲一個store是一個文件夾,裏面有多個hFile文件,如果BlockCache已經緩存了一個HFile文件了,那麼就在讀取store文件夾(一個列族的其中一個regin)裏面相關記錄的其他文件就好了。綜上所述,讀比寫要慢。
3 Hbase compact合併小文件流程
注意:1) minor不會刪除歷史時間戳的記錄,但是major大合併只會保留最新的數據記錄。
2)另外一個刪除歷史數據的時機是flush的時候,但是隻會刪除相同rowkey的多條時間戳記錄都在內存的情況下。
以上針對update情況,注意flush不會刪除delete的數據記錄,這是肯定的,因爲磁盤裏可能還有相同rowkey的記錄。
delete記錄只會在major的時候刪除。