HBase 預寫日誌 WAL

2021-06-26 08:40:07 字數 2016 閱讀 5020

wal

最重要的作用是災難恢復,一旦伺服器崩潰,通過重放

log,我們可以恢復崩潰之前的資料。如果寫入

wal失敗,整個操作也將認為失敗。

圖6  wal

基本流程:首先,客戶端初始化乙個可能對資料改動的操作,如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失敗,整個操作也將認為失敗。圖6wal 基本流程 首先,客戶端初始化乙個可能對資料改動的操作,如 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 修指甲 別亂想,博...