您好,登錄后才能下訂單哦!
一個store里面有很多個StoreFile, 最后數據是以很多個HFile這種數據結構的文件保存在HDFS上
說明:HBase集群,只有一張meta表,此表只有一個region,該region數據保存在一個HRegionServer上
scan 'hbase:meta'
來查看meta表信息1、客戶端首先從zk找到meta表的region位置,然后讀取meta表中的數據,meta表中存儲了用戶表的region信息
2、根據namespace、表名和rowkey信息。找到寫入數據對應的region信息
3、找到這個region對應的regionServer,然后發送請求
4、把數據分別寫到HLog(write ahead log)和memstore各一份
5、memstore達到閾值后把數據刷到磁盤,生成storeFile文件
補充:
HLog(write ahead log):
也稱為WAL意為Write ahead log,類似mysql中的binlog,用來做災難恢復時用,HLog記錄數據的所有變更,一旦數據修改,就可以從log中進行恢復。
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
<property>
<name>hbase.hregion.memstore.flush.size</name>
<value>134217728</value>
</property>
<property>
<name>hbase.hregion.memstore.block.multiplier</name>
<value>2</value>
</property>
<property>
<name>hbase.regionserver.global.memstore.size.lower.limit</name>
<value>0.95</value>
</property>
<property>
<name>hbase.regionserver.global.memstore.size</name>
<value>0.4</value>
</property>
flush ‘tablename’
或者flush ‘region name’
分別對一個表或者一個Region進行flush。為了減少flush過程對讀寫的影響,將整個flush過程分為三個階段:
prepare階段:遍歷當前Region中所有的Memstore,將Memstore中當前數據集CellSkipListSet做一個快照snapshot;然后再新建一個CellSkipListSet。后期寫入的數據都會寫入新的CellSkipListSet中。prepare階段需要加一把updateLock對寫請求阻塞,結束之后會釋放該鎖。因為此階段沒有任何費時操作,因此持鎖時間很短。
hbase為了==防止小文件過多==,以保證查詢效率,hbase需要在必要的時候將這些小的store file合并成相對較大的store file,這個過程就稱之為compaction。
在將Store中多個HFile合并為一個HFile
在這個過程中會選取一些小的、相鄰的StoreFile將他們合并成一個更大的StoreFile,對于超過了TTL的數據、更新的數據、刪除的數據僅僅只是做了標記。并沒有進行物理刪除,一次Minor Compaction的結果是更少并且更大的StoreFile。這種合并的觸發頻率很高。
<!--表示至少需要三個滿足條件的store file時,minor compaction才會啟動-->
<property>
<name>hbase.hstore.compactionThreshold</name>
<value>3</value>
</property>
<!--表示一次minor compaction中最多選取10個store file-->
<property>
<name>hbase.hstore.compaction.max</name>
<value>10</value>
</property>
<!--默認值為128m,
表示文件大小小于該值的store file 一定會加入到minor compaction的store file中
-->
<property>
<name>hbase.hstore.compaction.min.size</name>
<value>134217728</value>
</property>
<!--默認值為LONG.MAX_VALUE,
表示文件大小大于該值的store file 一定會被minor compaction排除-->
<property>
<name>hbase.hstore.compaction.max.size</name>
<value>9223372036854775807</value>
</property>
合并Store中所有的HFile為一個HFile
將所有的StoreFile合并成一個StoreFile,這個過程還會清理三類無意義數據:被刪除的數據、TTL過期數據、版本號超過設定版本號的數據。合并頻率比較低,默認7天執行一次,并且性能消耗非常大,建議生產關閉(設置為0),在應用空閑時間手動觸發。一般可以是手動控制進行合并,防止出現在業務高峰期。
major compaction觸發時間條件
<!--默認值為7天進行一次大合并,-->
<property>
<name>hbase.hregion.majorcompaction</name>
<value>604800000</value>
</property>
手動觸發
##使用major_compact命令
major_compact tableName
<property>
<name>hbase.hregion.majorcompaction</name>
<value>604800000</value>
</property>
手動觸發
##使用major_compact命令
major_compact tableName
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。