HBase中資料落地到磁碟的幾個時刻

2021-10-02 04:21:31 字數 1657 閱讀 5176

hbase的資料都是先寫到memstore中,然後才會flush到磁碟,那麼什麼時候會觸發memstore的flush?

當乙個region的memstore中快取的資料達到memstore的大小時,會觸發memstore級別的flush操作。memcache的size由引數hbase.hregion.memstore.flush.size指定,預設是128m。一般需要將該值調大,但並非越大越好。

當region所有的memstore的size之和達到引數hbase.hregion.memstore.block.multipiler * hbase.hregion.memstore.flush.size的值時會觸發flush。引數預設值分別為4和5242880。當需要調整這兩個引數的時候,一般選擇調整後乙個引數,不動第乙個。region級別的flush一般很少發生,因為column family的數量一般不會超過三個(經驗值),所以正常情況下,達不到上述兩個引數的乘積。

當regionserver所有的memstore快取的資料的大小之和超過低水位線時,將會觸發flush操作,且先從memstore最大的region開始flush,以此類推,直到下降到低水位線之下。

如果regionserver所有的memstore快取的資料大小之和超過高水位線,那麼reginserver將會阻塞讀寫,並強制flush

相關引數

hbase.regionserver.global.memstore.size 預設值 0.40(百分比)

hbase.regionserver.global.memstore.size.lower.limit 0.95 (百分比)

高水位的值為 :heapsize(堆記憶體)* hbase.regionserver.global.memstore.size

低水位的值為 :heapsize(堆記憶體)* hbase.regionserver.global.memstore.size * hbase.regionserver.global.memstore.size.lower.limit

一般堆記憶體大小不超過32gb,否則指標壓縮就失效了

wal的大小為hbase.regionserver.hlog.blocksize * hbase.regionserver.maxlogs決定,達到這個值之後,就會觸發flush。2.0之後,hbase.regionserver.hlog.blocksize的預設值由乙個hdfs 的block大小變為hdfs block的大小的兩倍了。

一般需要略大於hbase.regionserver.global.memstore.upperlimit * hbase_heapsize,避免wal頻繁的觸發flush。一般調大hbase.regionserver.maxlogs的值,預設是32

引數hbase.regionserver.optionalcacheflushinterval預設值1h;設定為0表示禁止自動flush;

使用flush 'tablename'或者flush 'regionname'對一張表或者乙個region進行flush,region的名字可以在web介面看到

將HBase中的表資料匯入到hive中

user friend 建立hb user friend外部表 create external table events.hb user friend row key string user id string friend id string stored by org.apache.hadoop...

hbase修復 資料無法寫入到表中。

2 解決步驟 我們輸入hbck命令檢視hbase的集群問題 根據上面的圖我們發現有region有空的row,所以我們需要進行修復一下 hadoop namenode2 opt hbase hbck fixemptymetacells 然後我們再檢視hbase的集群情況 至此問題就已經解決了,下面是h...

將hdfs資料匯入到hbase中的官方案例

首先我們在本地建立乙個檔案資料,資料中間是tab分隔符 root hdp 4 vi mrhbase.tsv 1002 pear yellow 將資料put到hdfs上 root hdp 4 hadoop fs put root mrhbase.tsv 建立hbase表 hbase main 016 ...