wal
最重要的作用是災難恢復,一旦伺服器崩潰,通過重放
log,我們可以恢復崩潰之前的資料。如果寫入
wal失敗,整個操作也將認為失敗。
圖6wal
基本流程:首先,客戶端初始化乙個可能對資料改動的操作,如put(put),delete(delete) 和incrementcolumnvalue()。這些操作將被封裝在乙個keyvalue物件例項中,傳送給hregionserver。一旦達到一定大小,hregionserver 將其傳送給hregion。這個過程中,資料會首先會被寫入wal,之後將被寫到實際存放資料的memstore中。
hlog是實現wal的類。乙個hregionserver對應乙個hlog例項。當hregion初始化時,hlog將作為乙個引數傳給hregion的建構函式。
wal中幾個重要的類:
1.
hlog
出於效能考慮,put(), delete() 和incrementcolumnvalue()可通過開關函式setwritetowal (boolean) 禁用wal。執行mapreduce job時,可通過關閉wal獲得效能提公升。
hlog
另乙個重要特性是將通過
sequence number
追蹤資料改變。它內部使用
atomiclong
保證執行緒安全。
2.
hlogkey
上一部分的儲存格式中有提到,hlogkey包含的一些主要變數,主要用於記錄key/value對的歸屬資訊。
3.
logflusher
資料以keyvalue形式到達hregionserver,將寫入wal,之後寫入乙個sequencefile。由於資料流在寫入檔案時經常會快取以提高效能,因此,有時資料實際儲存在記憶體中。
logflusher呼叫hlog.optionalsync(),後者根據hbase. regionserver. optionallogflushinterval (預設10秒)定期呼叫hlog.sync()。hlog.dowrite()也根據hbase.regionserver.flushlogentries(預設100秒)定期呼叫hlog.sync()。sync() 本身呼叫hlog.writer.sync(),它由sequencefilelogwriter實現。
4.
logroller
log的大小通過$hbase_home/conf/hbase-site.xml 的hbase.regionserver.logroll.period限制,預設是乙個小時。所以每60分鐘,會開啟乙個新的log檔案。久而久之,會有一大堆的檔案需要維護。logroller主要完成日誌的清理。
首先,logroller呼叫hlog.rollwriter(),定時滾動日誌,之後,利用hlog.cleanoldlogs()可以清除舊的日誌。它首先取得儲存檔案中的最大的sequence number,之後檢查是否存在乙個log所有的條目的」sequence number」均低於這個值,如果存在,將刪除這個log。
5.
replay
舊日誌往往由
regionserver
崩潰產生。當
hmaster
啟動或者檢測到
regionserver
崩潰,它將日誌檔案拆分為多份檔案,儲存在
region
所屬的資料夾。之後,將日誌重放。
重放過程:
hregionserver
啟動,開啟所管轄的
region
,檢查是否存在剩餘的
log檔案,如果存在,呼叫
store.doreconstructionlog()
。重放乙個日誌只是簡單地讀入乙個日誌,將日誌中的條目加入到
memstore
中。最後,
flush
操作將memstore
中資料flush
到硬碟中。
HBase 預寫日誌 WAL
wal 最重要的作用是災難恢復,一旦伺服器崩潰,通過重放 log,我們可以恢復崩潰之前的資料。如果寫入 wal失敗,整個操作也將認為失敗。圖6 wal 基本流程 首先,客戶端初始化乙個可能對資料改動的操作,如put put delete delete 和 incrementcolumnvalue 這...
HBase 預寫日誌 WAL
wal最重要的作用是災難恢復,一旦伺服器崩潰,通過重放 log,我們可以恢復崩潰之前的資料。如果寫入 wal失敗,整個操作也將認為失敗。圖6wal 基本流程 首先,客戶端初始化乙個可能對資料改動的操作,如 put put delete delete 和incrementcolumnvalue 這些操...
預寫日誌 WAL 介紹
預寫日誌 wal,write ahead log 是關係型資料庫中用於實現事務性和永續性的一系列技術。簡單來說就是,做乙個操作之前先講這件事情記錄下來。為什麼要使用wal呢?比如你的備忘錄裡面有如下記錄 2015.12.25 理髮 2015.12.28 整容 2015.12.31 修指甲 別亂想,博...