HBase(3):內部機制flush & compact & split
阿新 • • 發佈:2018-12-02
1.實現功能
當向hbase資料庫中儲存資料的時候,實際儲存過程是有三個階段:flush & compact & split。
2.分步說明
(1)flush
Client寫入 -> 存入MemStore,一直到MemStore滿(Hlog)-> Flush成一個StoreFile儲存在HDFS上
(2)compact
StoreFile,直至增長到一定閾值 -> 觸發Compact合併操作 -> 多個StoreFile合併成一個StoreFile
(3)split
單個StoreFile大小超過一定閾值後,觸發Split操作,把當前Region Split成2個Region
HMaster分配到相應的HRegionServer上
3.hbase-default.xml中相關引數
Flush: <!--當memstore的大小超過這個值的時候,會flush到磁碟。128M--> <property> <name>hbase.hregion.memstore.flush.size</name> <value>134217728</value> </property> <!--單個regionserver的全部memstore的最大值。超過這個值總容量(Max Heap=983.4 M)*0.4, 一個新的put插入操作會被掛起,強制執行flush操作。 --> <property> <name>hbase.regionserver.global.memstore.upperLimit</name> <value>0.4</value> </property> <!--當強制執行flush操作的時候,當低於這個值的時候,flush會停止。預設是堆大小的 35% . --> <property> <name>hbase.regionserver.global.memstore.lowerLimit</name> <value>0.35</value> </property> Compact: <!--當一個HStore含有多於這個值的HStoreFiles(每一個memstore flush產生一個HStoreFile)的時候,會執行一個合併操作,把這HStoreFiles寫成一個--> <property> <name>hbase.hstore.compactionThreshold</name> <value>3</value> </property> <!--一個Region中的所有HStoreFile的major compactions的時間間隔。預設是1天。--> <property> <name>hbase.hregion.majorcompaction</name> <value>86400000</value> </property> Split: <!--最大HStoreFile大小。若某個列族的HStoreFile增長達到這個值,這個Hegion會被切割成兩個。 預設: 10G.--> <property> <name>hbase.hregion.max.filesize</name> <value>10737418240</value> </property>