Hbase中put和delete對hfile的操作

2021-06-20 06:48:43 字數 2106 閱讀 9159

put和delete是hbase中最常見的操作,這些操作最終都是體現在對hfile的修改上。下面通過一些例子看下,當我們執行put和delete後,hfile中發生了什麼樣的變化。為了簡單,我們通過org.apache.hadoop.hbase.io.hfile.hfile來檢視hfile中的內容變化。

建立測試表sunwg01

hbase(main):011:0> create 'sunwg01','f1'

0 row(s) in 1.0840 seconds

寫入資料

hbase(main):013:0> put 'sunwg01','100','f1:k1','tom'

0 row(s) in 0.0440 seconds

將memstore中的資料重新整理到磁碟

hbase(main):014:0> flush 'sunwg01'

0 row(s) in 0.1210 seconds

檢視檔案內容

[hadoop@hadoop01 logs]$ hbase org.apache.hadoop.hbase.io.hfile.hfile -v -p -f hdfs://hadoop01:9000/hbase/sunwg01/8baafe2e2a08ed530a1ea909964ec204/f1/23867017b8804d35be49fe2f76480d47

scanning -> hdfs://hadoop01:9000/hbase/sunwg01/8baafe2e2a08ed530a1ea909964ec204/f1/23867017b8804d35be49fe2f76480d47

12/04/25 06:46:36 info hfile.cacheconfig: allocating lrublockcache with maximum size 24.6m

k: 100/f1:k1/1335307505596/put/vlen=3 v: tom

scanned kv count -> 1

檔案中現在有一條記錄,該記錄的key為100,value為tom,操作為put,版本號為當前時間1335307505596

當然你可以插入一條為版本為未來某個時間的記錄,如:

hbase(main):016:0> put 'sunwg01','100','f1:k1','tom',2335307505596

0 row(s) in 0.0250 seconds

下面看下delete的操作,

hbase(main):019:0> delete 'sunwg01','100','f1:k1'

0 row(s) in 0.0190 seconds

hbase(main):020:0> flush 'sunwg01'

0 row(s) in 0.0980 seconds

檢視底層的hfile,

[hadoop@hadoop01 logs]$ hbase org.apache.hadoop.hbase.io.hfile.hfile -v -p -f hdfs://hadoop01:9000/hbase/sunwg01/8baafe2e2a08ed530a1ea909964ec204/f1/57945bcbacd34eed9523350864609235

scanning -> hdfs://hadoop01:9000/hbase/sunwg01/8baafe2e2a08ed530a1ea909964ec204/f1/57945bcbacd34eed9523350864609235

12/04/25 06:50:33 info hfile.cacheconfig: allocating lrublockcache with maximum size 24.6m

k: 100/f1:k1/2335307505596/put/vlen=3 v: tom

k: 100/f1:k1/1335307694932/deletecolumn/vlen=0 v: 

scanned kv count -> 2

這裡面能看到剛才put的,那個未來某個時間的記錄,時間為2335307505596。也能看到剛才的delete的操作,該操作的型別為deletecolumn,時間戳為1335307694932,表示在該時間前的資料都被刪掉了。那麼如果把這個delete的時間設定為未來某個時間,那麼你現在插入的記錄也是無法訪問的。

HBASE筆記二 Get和Put

get 取資料過程 load and cached 只有第一次訪問此rowkey 訪問 root 獲取zookeeper的host 訪問 meta 獲得regionserver,meta 包含每個rowkey所在region srver 有快取時 使用storefile讀取資料 put 儲存資料 w...

Oracle truncate和delete的區別

首先truncate是ddl語句,而delete是dml語句。truncate的刪除比delete快很多,尤其是表資料量大的時候,原因是truncate執行過程中不產生undo,所以truncate也無法再回滾。而delete在commit之前肯定是可以回滾的。truncate的另乙個特性是會將表的...

put批量提交hbase效能改善

在使用hbase put api的時候,有幾個會影響效能的因素。1.put list size hbase的put支援單條插入,也支援批量插入。2.autoflush autoflush指的是在每次呼叫hbase的put操作,是否提交到hbase server。預設是true,每次會提交。如果此時是...