驗證HFile和HLog中序列號的關係

orchidllh發表於2013-11-27

首先我有兩個測試的表: t_lisa和 t_lisa1t_lisa的一個regiont_lisa1的整個表都在相同的regionserver上,所以他們的更新會寫相同的HLog檔案,我會在t_lisat_lisa1都進行更新操作,然後手工的對t_lisa進行flush操作,將t_lisamemstore重新整理到HFile,然後再對比t_lisaHFilet_lisa1HFileHLog中的序列號。

先確認一下兩個表當前的HFile情況:

[root@a01 ~]# hadoop fs -ls /hbase_root/t_lisa/e56ca60a2a54ae55b8631bbd21672e35/cf_1

Found 1 items

-rw-r--r--   3 root supergroup        964 2013-11-16 15:26 /hbase_root/t_lisa/e56ca60a2a54ae55b8631bbd21672e35/cf_1/b6ab19771b4f4a7597afffd37ccf907b

[root@a01 ~]# hadoop fs -ls /hbase_root/t_lisa/e56ca60a2a54ae55b8631bbd21672e35/cf_2

Found 1 items

-rw-r--r--   3 root supergroup        706 2013-11-14 09:44 /hbase_root/t_lisa/e56ca60a2a54ae55b8631bbd21672e35/cf_2/3cc23abe61f74ccfa1e2240153487101

[root@a01 ~]# hadoop fs -ls /hbase_root/t_lisa/fa8f6eb2a0bcb54e443f9bfc2693768d/cf_1

Found 1 items

-rw-r--r--   3 root supergroup        881 2013-11-26 18:33 /hbase_root/t_lisa/fa8f6eb2a0bcb54e443f9bfc2693768d/cf_1/ad4992b0fd5843318b00c0c60a43f786

[root@a01 ~]# hadoop fs -ls /hbase_root/t_lisa/fa8f6eb2a0bcb54e443f9bfc2693768d/cf_2

Found 1 items

-rw-r--r--   3 root supergroup        712 2013-11-15 14:26 /hbase_root/t_lisa/fa8f6eb2a0bcb54e443f9bfc2693768d/cf_2/5df75d8416bd4d049937901c154d3dfd

[root@a01 ~]# hadoop fs -ls /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_1

Found 1 items

-rw-r--r--   3 root supergroup        795 2013-11-14 09:39 /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_1/e541b8a04f224e869166ee43783bd8d0

[root@a01 ~]# hadoop fs -ls /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_2

Found 1 items

-rw-r--r--   3 root supergroup        736 2013-11-14 09:39 /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_2/6eb83725b6b042958067d900761ef613

 

然後我們對兩個表的四個列族都進行修改操作:

hbase(main):001:0> put't_lisa','lisa10','cf_1:w1','10z2'

0 row(s) in 0.5120 seconds

 

hbase(main):002:0> put't_lisa','lisa1','cf_1:w100','abcd'

0 row(s) in 0.0050 seconds

 

hbase(main):003:0> put't_lisa','lisa10','cf_2:w1','10z2'

0 row(s) in 0.0050 seconds

 

hbase(main):004:0> put't_lisa','lisa1','cf_2:w100','abcd'

0 row(s) in 0.0030 seconds

 

hbase(main):005:0> put't_lisa1','lisa11','cf_1:23','3sdfs'

0 row(s) in 0.1430 seconds

 

hbase(main):006:0> put't_lisa1','lisa12','cf_1:34','zzzz'

0 row(s) in 0.0040 seconds

 

hbase(main):007:0> put't_lisa1','lisa11','cf_2:23','3sdfs'

0 row(s) in 0.0040 seconds

 

hbase(main):008:0> put't_lisa1','lisa12','cf_2:34','zzzz'

0 row(s) in 0.0040 seconds

 

hbase(main):011:0> put't_lisa','lisa77','cf_1:w100','abcd'

0 row(s) in 0.0370 seconds

 

hbase(main):012:0> put't_lisa','lisa79','cf_2:w1','10z2'

0 row(s) in 0.0040 seconds

 

確認在不重新整理memstore的時候,HFile是沒有變化的。

t_lisa1MAX_SEQ_ID_KEY = 2309244

t_lisaMAX_SEQ_ID_KEY = 2316021

HLog中的序列號都大於HLog的序列號,所以記憶體還沒有重新整理到HFile

[root@a01 hbase]# bin/hbase hlog /hbase_root/.logs/*,60020,1385442023669/*%2C60020%2C1385442023669.1385528428894 -p

Sequence 2316025 from region 787ce41dabb55075935e7060583ae6af in table t_lisa1

  Action:

    row: lisa11

    column: cf_1:23

    at time: Wed Nov 27 14:32:17 CST 2013

    value: 3sdfs

Sequence 2316026 from region 787ce41dabb55075935e7060583ae6af in table t_lisa1

  Action:

    row: lisa12

    column: cf_1:34

    at time: Wed Nov 27 14:32:17 CST 2013

    value: zzzz

Sequence 2316027 from region 787ce41dabb55075935e7060583ae6af in table t_lisa1

  Action:

    row: lisa11

    column: cf_2:23

    at time: Wed Nov 27 14:32:17 CST 2013

    value: 3sdfs

Sequence 2316028 from region 787ce41dabb55075935e7060583ae6af in table t_lisa1

  Action:

    row: lisa12

    column: cf_2:34

    at time: Wed Nov 27 14:32:17 CST 2013

value: zzzz

Sequence 2316029 from region fa8f6eb2a0bcb54e443f9bfc2693768d in table t_lisa

  Action:

    row: lisa77

    column: cf_1:w100

    at time: Wed Nov 27 14:45:08 CST 2013

    value: abcd

Sequence 2316030 from region fa8f6eb2a0bcb54e443f9bfc2693768d in table t_lisa

  Action:

    row: lisa79

    column: cf_2:w1

    at time: Wed Nov 27 14:45:08 CST 2013

    value: 10z2

 

hbase(main):010:0> help 'flush'

Flush all regions in passed table or pass a region row to

flush an individual region.  For example:

 

  hbase> flush 'TABLENAME'

  hbase> flush 'REGIONNAME'

flush是可以針對表或者regionname的,所以是我多慮了。

我們flush ‘t_lisa,lisa3,1384393470579.fa8f6eb2a0bcb54e443f9bfc2693768d.’

 

hbase(main):013:0> flush 't_lisa,lisa3,1384393470579.fa8f6eb2a0bcb54e443f9bfc2693768d.'

0 row(s) in 0.2180 seconds

 

[root@a01 hbase]# hadoop fs -ls /hbase_root/t_lisa/fa8f6eb2a0bcb54e443f9bfc2693768d/cf_1/                                

Found 2 items

-rw-r--r--   3 root supergroup        711 2013-11-27 14:46 /hbase_root/t_lisa/fa8f6eb2a0bcb54e443f9bfc2693768d/cf_1/9731d813c4a54c018eee7c7a5ed4b11f

-rw-r--r--   3 root supergroup        881 2013-11-26 18:33 /hbase_root/t_lisa/fa8f6eb2a0bcb54e443f9bfc2693768d/cf_1/ad4992b0fd5843318b00c0c60a43f786

[root@a01 hbase]# hadoop fs -ls /hbase_root/t_lisa/fa8f6eb2a0bcb54e443f9bfc2693768d/cf_2 

Found 2 items

-rw-r--r--   3 root supergroup        712 2013-11-15 14:26 /hbase_root/t_lisa/fa8f6eb2a0bcb54e443f9bfc2693768d/cf_2/5df75d8416bd4d049937901c154d3dfd

-rw-r--r--   3 root supergroup        705 2013-11-27 14:46 /hbase_root/t_lisa/fa8f6eb2a0bcb54e443f9bfc2693768d/cf_2/cbb4312c3861473faf04a17a7861d51e

[root@a01 hbase]# hadoop fs -ls /hbase_root/t_lisa/e56ca60a2a54ae55b8631bbd21672e35/cf_1

Found 1 items

-rw-r--r--   3 root supergroup        964 2013-11-16 15:26 /hbase_root/t_lisa/e56ca60a2a54ae55b8631bbd21672e35/cf_1/b6ab19771b4f4a7597afffd37ccf907b

[root@a01 hbase]# hadoop fs -ls /hbase_root/t_lisa/e56ca60a2a54ae55b8631bbd21672e35/cf_2

Found 1 items

-rw-r--r--   3 root supergroup        706 2013-11-14 09:44 /hbase_root/t_lisa/e56ca60a2a54ae55b8631bbd21672e35/cf_2/3cc23abe61f74ccfa1e2240153487101

[root@a01 hbase]# hadoop fs -ls /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_1

Found 1 items

-rw-r--r--   3 root supergroup        795 2013-11-14 09:39 /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_1/e541b8a04f224e869166ee43783bd8d0

[root@a01 hbase]# hadoop fs -ls /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_2

Found 1 items

-rw-r--r--   3 root supergroup        736 2013-11-14 09:39 /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_2/6eb83725b6b042958067d900761ef613

 

[root@a01 hbase]# bin/hbase org.apache.hadoop.hbase.io.hfile.HFile -f /hbase_root/t_lisa/fa8f6eb2a0bcb54e443f9bfc2693768d/cf_1/9731d813c4a54c018eee7c7a5ed4b11f -v -m -p

MAX_SEQ_ID_KEY = 2316031

 

[root@a01 hbase]# bin/hbase org.apache.hadoop.hbase.io.hfile.HFile -f  /hbase_root/t_lisa/fa8f6eb2a0bcb54e443f9bfc2693768d/cf_2/cbb4312c3861473faf04a17a7861d51e -v -m -p

MAX_SEQ_ID_KEY = 2316031

 

為什麼是2316031呢,比之前看到的HLog的序列號大1,最後的這個操作是什麼?

Sequence 2316031 from region fa8f6eb2a0bcb54e443f9bfc2693768d in table t_lisa

  Action:

    row: METAROW

    column: METAFAMILY:

    at time: Wed Nov 27 14:46:30 CST 2013

value: HBASE::CACHEFLUSH

最後這個操作就是flush memstore

那麼那些沒有flush的操作什麼時候會重新整理到HFile呢,理論上HLog每小時要滾動,滾動的時候判斷這部分的修改沒有固化,是不是強制重新整理?

要等下一個小時觀察一下變化:

 

[root@a01 hbase]# hadoop fs -ls /hbase_root/.logs

Found 5 items

drwxr-xr-x   - root supergroup          0 2013-11-27 13:00 /hbase_root/.logs/*,60020,1385442023669

drwxr-xr-x   - root supergroup          0 2013-11-26 13:00 /hbase_root/.logs/*,60020,1385442025408

drwxr-xr-x   - root supergroup          0 2013-11-26 13:00 /hbase_root/.logs/*,60020,1385442024055

drwxr-xr-x   - root supergroup          0 2013-11-26 13:00 /hbase_root/.logs/*,60020,1385442028712

drwxr-xr-x   - root supergroup          0 2013-11-26 15:00 /hbase_root/.logs/*,60020,1385442028696

[root@a01 hbase]# hadoop fs -ls /hbase_root/.oldlogs

[root@a01 hbase]# date

Wed Nov 27 15:00:10 CST 2013

[root@a01 hbase]# hadoop fs -ls /hbase_root/.logs

Found 5 items

drwxr-xr-x   - root supergroup          0 2013-11-27 15:00 /hbase_root/.logs/*,60020,1385442023669

drwxr-xr-x   - root supergroup          0 2013-11-26 13:00 /hbase_root/.logs/*,60020,1385442025408

drwxr-xr-x   - root supergroup          0 2013-11-27 15:00 /hbase_root/.logs/*,60020,1385442024055

drwxr-xr-x   - root supergroup          0 2013-11-26 13:00 /hbase_root/.logs/*,60020,1385442028712

drwxr-xr-x   - root supergroup          0 2013-11-26 15:00 /hbase_root/.logs/*,60020,1385442028696

 

可以看到日誌的確滾動了,每個regionserver下出現了第二個HLog檔案:

[root@a01 hbase]# hadoop fs -ls /hbase_root/.logs/*,60020,1385442023669

Found 2 items

-rw-r--r--   3 root supergroup        986 2013-11-27 13:00 /hbase_root/.logs/*,60020,1385442023669/*%2C60020%2C1385442023669.1385528428894

-rw-r--r--   3 root supergroup          0 2013-11-27 15:00 /hbase_root/.logs/*,60020,1385442023669/*%2C60020%2C1385442023669.1385535629603

[root@a01 hbase]# hadoop fs -ls /hbase_root/.logs/*,60020,1385442024055

Found 2 items

-rw-r--r--   3 root supergroup        608 2013-11-26 13:00 /hbase_root/.logs/*,60020,1385442024055/*%2C60020%2C1385442024055.1385442024670

-rw-r--r--   3 root supergroup          0 2013-11-27 15:00 /hbase_root/.logs/*,60020,1385442024055/*%2C60020%2C1385442024055.1385535626291

 

但是對應的HFile並沒有發生變化,也就是memstore沒有重新整理到HFile

[root@a01 hbase]# hadoop fs -ls /hbase_root/t_lisa/e56ca60a2a54ae55b8631bbd21672e35/cf_1

Found 1 items

-rw-r--r--   3 root supergroup        964 2013-11-16 15:26 /hbase_root/t_lisa/e56ca60a2a54ae55b8631bbd21672e35/cf_1/b6ab19771b4f4a7597afffd37ccf907b

[root@a01 hbase]# hadoop fs -ls /hbase_root/t_lisa/e56ca60a2a54ae55b8631bbd21672e35/cf_2

Found 1 items

-rw-r--r--   3 root supergroup        706 2013-11-14 09:44 /hbase_root/t_lisa/e56ca60a2a54ae55b8631bbd21672e35/cf_2/3cc23abe61f74ccfa1e2240153487101

[root@a01 hbase]# hadoop fs -ls /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_1

Found 1 items

-rw-r--r--   3 root supergroup        795 2013-11-14 09:39 /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_1/e541b8a04f224e869166ee43783bd8d0

[root@a01 hbase]# hadoop fs -ls /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_2

Found 1 items

-rw-r--r--   3 root supergroup        736 2013-11-14 09:39 /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_2/6eb83725b6b042958067d900761ef613

 

也就是HLog仍然在.logs目錄下面,只有等到HLog中所有的更新都重新整理到HFile以後,才會將檔案挪到.oldlogs目錄下面。日誌的滾動不會觸發flush的操作。當某個regionserver下面的HLog超過一定數量的時候,會有一個機制強制將memstore重新整理到HFile中。

 

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/51862/viewspace-1061291/,如需轉載,請註明出處,否則將追究法律責任。

相關文章