一個(gè)store里面有很多個(gè)StoreFile, 最后數(shù)據(jù)是以很多個(gè)HFile這種數(shù)據(jù)結(jié)構(gòu)的文件保存在HDFS上
說明:HBase集群,只有一張meta表,此表只有一個(gè)region,該region數(shù)據(jù)保存在一個(gè)HRegionServer上
scan 'hbase:meta'
來查看meta表信息1、客戶端首先從zk找到meta表的region位置,然后讀取meta表中的數(shù)據(jù),meta表中存儲(chǔ)了用戶表的region信息
2、根據(jù)namespace、表名和rowkey信息。找到寫入數(shù)據(jù)對應(yīng)的region信息
3、找到這個(gè)region對應(yīng)的regionServer,然后發(fā)送請求
4、把數(shù)據(jù)分別寫到HLog(write ahead log)和memstore各一份
5、memstore達(dá)到閾值后把數(shù)據(jù)刷到磁盤,生成storeFile文件
補(bǔ)充:
HLog(write ahead log):
也稱為WAL意為Write ahead log,類似mysql中的binlog,用來做災(zāi)難恢復(fù)時(shí)用,HLog記錄數(shù)據(jù)的所有變更,一旦數(shù)據(jù)修改,就可以從log中進(jìn)行恢復(fù)。
<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’
分別對一個(gè)表或者一個(gè)Region進(jìn)行flush。為了減少flush過程對讀寫的影響,將整個(gè)flush過程分為三個(gè)階段:
prepare階段:遍歷當(dāng)前Region中所有的Memstore,將Memstore中當(dāng)前數(shù)據(jù)集CellSkipListSet做一個(gè)快照snapshot;然后再新建一個(gè)CellSkipListSet。后期寫入的數(shù)據(jù)都會(huì)寫入新的CellSkipListSet中。prepare階段需要加一把updateLock對寫請求阻塞,結(jié)束之后會(huì)釋放該鎖。因?yàn)榇穗A段沒有任何費(fèi)時(shí)操作,因此持鎖時(shí)間很短。
hbase為了==防止小文件過多==,以保證查詢效率,hbase需要在必要的時(shí)候?qū)⑦@些小的store file合并成相對較大的store file,這個(gè)過程就稱之為compaction。
在將Store中多個(gè)HFile合并為一個(gè)HFile
在這個(gè)過程中會(huì)選取一些小的、相鄰的StoreFile將他們合并成一個(gè)更大的StoreFile,對于超過了TTL的數(shù)據(jù)、更新的數(shù)據(jù)、刪除的數(shù)據(jù)僅僅只是做了標(biāo)記。并沒有進(jìn)行物理刪除,一次Minor Compaction的結(jié)果是更少并且更大的StoreFile。這種合并的觸發(fā)頻率很高。
<!--表示至少需要三個(gè)滿足條件的store file時(shí),minor compaction才會(huì)啟動(dòng)-->
<property>
<name>hbase.hstore.compactionThreshold</name>
<value>3</value>
</property>
<!--表示一次minor compaction中最多選取10個(gè)store file-->
<property>
<name>hbase.hstore.compaction.max</name>
<value>10</value>
</property>
<!--默認(rèn)值為128m,
表示文件大小小于該值的store file 一定會(huì)加入到minor compaction的store file中
-->
<property>
<name>hbase.hstore.compaction.min.size</name>
<value>134217728</value>
</property>
<!--默認(rèn)值為LONG.MAX_VALUE,
表示文件大小大于該值的store file 一定會(huì)被minor compaction排除-->
<property>
<name>hbase.hstore.compaction.max.size</name>
<value>9223372036854775807</value>
</property>
合并Store中所有的HFile為一個(gè)HFile
將所有的StoreFile合并成一個(gè)StoreFile,這個(gè)過程還會(huì)清理三類無意義數(shù)據(jù):被刪除的數(shù)據(jù)、TTL過期數(shù)據(jù)、版本號超過設(shè)定版本號的數(shù)據(jù)。合并頻率比較低,默認(rèn)7天執(zhí)行一次,并且性能消耗非常大,建議生產(chǎn)關(guān)閉(設(shè)置為0),在應(yīng)用空閑時(shí)間手動(dòng)觸發(fā)。一般可以是手動(dòng)控制進(jìn)行合并,防止出現(xiàn)在業(yè)務(wù)高峰期。
major compaction觸發(fā)時(shí)間條件
<!--默認(rèn)值為7天進(jìn)行一次大合并,-->
<property>
<name>hbase.hregion.majorcompaction</name>
<value>604800000</value>
</property>
手動(dòng)觸發(fā)
##使用major_compact命令
major_compact tableName
<property>
<name>hbase.hregion.majorcompaction</name>
<value>604800000</value>
</property>
手動(dòng)觸發(fā)
##使用major_compact命令
major_compact tableName
標(biāo)題名稱:Hbase數(shù)據(jù)存儲(chǔ)原理與讀寫詳解-創(chuàng)新互聯(lián)
網(wǎng)站網(wǎng)址:http://www.rwnh.cn/article14/dohcge.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站設(shè)計(jì)公司、靜態(tài)網(wǎng)站、微信小程序、虛擬主機(jī)、微信公眾號、關(guān)鍵詞優(yōu)化
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)
猜你還喜歡下面的內(nèi)容