關於HBase的日誌檔案和HFile
在HBase的根目錄下面,有兩個跟日誌相關的目錄,.logs和.oldlogs。.logs儲存的是所有Regionserver上當前在寫入的HLog,可以看到每個RegionServer對應一個檔案,所以HLog是對應RegionServer的。
HLog預設情況下每個小時會滾動,這是通過引數hbase.regionserver.logroll.period控制的,這個引數的預設值是1小時。
此外,hbase.regionserver.hlog.blocksize和fs_local.block.size控制當HLog的大小超過32M的時候,會滾動。
Hbase.regionserver.logroll.multiplier,預設值是95%,表示日誌達到95%的時候,也會進行滾動。
日誌檔案的滾動操作,就是檢查HFile中的序列號,確認日誌中所有的序列號都小於HFile的序列號,確保所有的日誌內容都已經固化到HFile中,確認後將當前的日誌挪到.oldlog目錄下。
這裡有個問題還有些疑惑,書裡寫的是檢查寫入儲存檔案中最大的序列號是多少,小於這個序列號的所有修改都已經固化了,只要確保日誌中的最大序列號比這個序列號小,就可以確認這個日誌已經固化,可以挪到.oldlog下。
但是memstore重新整理到HFile是對HStore的,對錶的,可能有的表更新比較多,重新整理的快,已經固化到HFile,但有的表修改少,還沒有重新整理到HFile,這和序列號的順序應該是沒有必然的關係的,後續應該可以做個測試來驗證一下。
當前日誌的檔案,在寫滿一個塊之前,都顯示的是0位元組,但實際上可能已經有資料,只是顯示的問題而已。
現在插入幾條記錄,做些修改的操作,檢視日誌的內容:
hbase(main):001:0> put't_lisa','lisa5','cf_1:w1','10d2'
0 row(s) in 0.4590 seconds
hbase(main):002:0> put't_lisa','lisa6','cf_1:w1','1032'
0 row(s) in 0.0050 seconds
hbase(main):003:0> put't_lisa','lisa7','cf_1:w1','10z2'
0 row(s) in 0.0040 seconds
hbase(main):004:0> put't_lisa','lisa8','cf_1:w1','10e2'
0 row(s) in 0.0040 seconds
hbase(main):002:0> delete 't_lisa','lisa5','cf_1'
0 row(s) in 0.4270 seconds
檢視日誌檔案,雖然大小為0,但是實際上寫操作是先寫了WAL,才寫memstore的,這裡只是檔案大小顯示的問題。
每個regionserver最初都會有一個HLog,不管是不是有更新操作。
[root@a01 hbase]# hadoop fs -ls /hbase_root/.logs
檢視日誌檔案的內容,-p表示檢視對應的value:
[root@a01 hbase]# bin/hbase hlog /hbase_root/.logs/*,60020,1385442023669/*%2C60020%2C1385442023669.1385449225598 -p
Sequence 2316016 from region fa8f6eb2a0bcb54e443f9bfc2693768d in table t_lisa
Action:
row: lisa5
column: cf_1:w1
at time: Tue Nov 26 15:17:04 CST 2013
value: 10d2
Sequence 2316017 from region fa8f6eb2a0bcb54e443f9bfc2693768d in table t_lisa
Action:
row: lisa6
column: cf_1:w1
at time: Tue Nov 26 15:17:04 CST 2013
value: 1032
Sequence 2316018 from region fa8f6eb2a0bcb54e443f9bfc2693768d in table t_lisa
Action:
row: lisa7
column: cf_1:w1
at time: Tue Nov 26 15:17:04 CST 2013
value: 10z2
Sequence 2316019 from region fa8f6eb2a0bcb54e443f9bfc2693768d in table t_lisa
Action:
row: lisa8
column: cf_1:w1
at time: Tue Nov 26 15:17:04 CST 2013
value: 10e2
Sequence 2316020 from region fa8f6eb2a0bcb54e443f9bfc2693768d in table t_lisa
Action:
row: lisa5
column: cf_1:
at time: Tue Nov 26 15:31:49 CST 2013
value:
擷取其中的一小段進行分析:
Sequence 2316016 from region fa8f6eb2a0bcb54e443f9bfc2693768d in table t_lisa
Action:
row: lisa5
column: cf_1:w1
at time: Tue Nov 26 15:17:04 CST 2013
value: 10d2
Sequence 2316016 :序列號,在恢復的時候,會判斷這個id和HFile中序列ID的大小,小於HFile序列ID(MAX_SEQ_ID_KEY)的操作不用再重做,因為已經固化到資料檔案中了。
region fa8f6eb2a0bcb54e443f9bfc2693768d:region name中按照前面部分的MD5雜湊值
table t_lisa: 表名
row: lisa5:行鍵
column: cf_1:w1:列族和列識別符號
value: 10d2:值
Delete 和 insert操作的日誌並沒有明顯寫明action
檢視HFile的資訊,這裡可以看到HFile中的kv資料、壓縮、起始rowkey等非常詳細的資訊:
[root@a01 ~]# cd /home/hbase
[root@a01 hbase]# bin/hbase org.apache.hadoop.hbase.io.hfile.HFile -f /hbase_root/t_lisa1/787ce41dabb55075935e7060583ae6af/cf_1/e541b8a04f224e869166ee43783bd8d0 -v -m -p
K: lisa1/cf_1:a/1384389531130/Put/vlen=1/ts=0 V: 1
K: lisa1/cf_1:b/1384390435899/Put/vlen=1/ts=0 V: 6
K: lisa1/cf_1:b/1384389531157/Put/vlen=1/ts=0 V: 5
K: lisa1/cf_1:b1/1384390714903/Put/vlen=2/ts=0 V: 61
firstKey=lisa1/cf_1:a/1384389531130/Put,
lastKey=lisa1/cf_1:b1/1384390714903/Put,
MAX_SEQ_ID_KEY = 2309244
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/51862/viewspace-1061242/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 12C關於CDB、PDB 日誌檔案redo log的總結
- SpringBoot指定日誌檔案和日誌Profile功能Spring Boot
- go開發屬於自己的日誌庫-檔案日誌庫實現Go
- linux檔案系統和日誌分析Linux
- 【Oracle】如何修改資料檔案和日誌檔案的路徑Oracle
- go 開發屬於自己的日誌庫-檔案日誌庫原型實現Go原型
- 關於MySQL 通用查詢日誌和慢查詢日誌分析MySql
- 基於Docker應用容器日誌檔案收集Docker
- 【MySQL日誌】MySQL日誌檔案初級管理MySql
- 探究MySQL中的日誌檔案MySql
- mysql的日誌檔案詳解MySql
- Linux 檔案系統與日誌分析的相關知識Linux
- java專案日誌配置檔案Java
- Hbase-原理-region合併和hfile的合併(大合併、小合併)
- Linux系統定時清空日誌內容和刪除日誌檔案教程。Linux
- 限制 Apache日誌檔案大小的方法Apache
- selenium-日誌檔案的使用(十二)
- 日誌檔案過大清理
- sybase iq日誌檔案管理
- MySQL InnoDB日誌檔案配置MySql
- 在Linux中,有一堆日誌檔案,如何刪除7天前的日誌檔案?Linux
- Tomcat各種日誌的關係與catalina.out檔案的分割Tomcat
- sql2008刪除log檔案和清空日誌的方法SQL
- 如何將日誌檔案和二進位制檔案快速匯入HDFS?
- 2024/11/20日 日誌 關於 Filter & ListenerFilter
- 2024/11/27日 日誌 關於Vue && ElementVue
- mysql關於ib_logfile事務日誌和binary log二進位制日誌的區別MySql
- Laravel 指定日誌檔案記錄任意日誌Laravel
- 日誌檔案使用小結(轉)
- lumen 日誌按天生成檔案
- tempdb日誌檔案暴增分析
- nginx日誌配置檔案說明Nginx
- linux 日誌log檔案 截斷Linux
- Oralce資料庫關閉歸檔日誌並且刪除歸檔日誌資料庫
- SLF4J記錄日誌&&日誌檔案的滾動策略__SpringBootSpring Boot
- SpringBoot通過yml和xml檔案配置日誌輸出Spring BootXML
- 在Linux中,如何管理和最佳化日誌檔案?Linux
- 操作日誌記錄(包括輸出至自定義日誌檔案)
- 關於檔案系統在建立目錄檔案和普通檔案時的區別