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 ...