驗證HFile和HLog中序列號的關係
首先我有兩個測試的表: t_lisa和 t_lisa1,t_lisa的一個region和t_lisa1的整個表都在相同的regionserver上,所以他們的更新會寫相同的HLog檔案,我會在t_lisa和t_lisa1都進行更新操作,然後手工的對t_lisa進行flush操作,將t_lisa的memstore重新整理到HFile,然後再對比t_lisa的HFile,t_lisa1的HFile和HLog中的序列號。
先確認一下兩個表當前的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_lisa1的MAX_SEQ_ID_KEY = 2309244
t_lisa的MAX_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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Laravel 中多型關係的表單驗證 (trait 版)Laravel多型AI
- 關於HBase的日誌檔案和HFile
- SAP R/3 中會計憑證和物料憑證的對應關係
- 【關係抽取-R-BERT】定義訓練和驗證迴圈
- iOS 中 UIView 和 CALayer 的關係iOSUIView
- php與js方式驗證手機號碼和郵件地址的合法性,js驗證身份證號碼PHPJS
- SAP HUM 將HU與檢驗批號碼解除關聯關係
- js中__proto__和prototype的關係JS
- 理解JavaScript中BOM和DOM的關係JavaScript
- PHP 驗證身份證號碼PHP
- 中國身份證號驗證庫
- C++身份證號驗證C++
- C#驗證身份證號C#
- Windows系統中owner owned 關係和 parent child關係Windows
- SAP 如何將無序列號的庫存與序列號關聯起來?
- http中session和cookie的區別和關係HTTPSessionCookie
- 驗證碼的作用和相關技術
- ITL中xid 和 uba的驗證!
- FAILGROUP和REDUNDANCY之間的關係關係!AI
- 伴隨矩陣和逆矩陣的關係證明矩陣
- js正則驗證身份證號JS
- 身份證號碼驗證系統
- 身份證號碼之js驗證JS
- 關於谷歌賬號註冊手機號無法驗證的解決方法谷歌
- PHP校驗15位和18位身份證號PHP
- php驗證手機號PHP
- 手機號碼驗證
- Java正規表示式——驗證手機號和電話號碼Java
- 身份證號碼驗證演算法演算法
- js實現身份證號碼驗證JS
- Jive筆記1--關於Jive1中的驗證和相關類的呼叫 (轉)筆記
- 有關係統整合中的統一認證和儘量統一的授權問題
- OGG 中replicat 和extract 關係圖
- JS驗證18位身份證號的正確性JS
- javascript實現的身份證號碼驗證程式碼JavaScript
- 關於軟體驗證中的單元測試
- Java 中的 transient 關鍵字和物件序列化Java物件
- WPF中Grid容器中VerticalAlignment和HorizonAlignment和Margin的關係。