HBase 預寫日誌 WAL

2021-07-09 13:39:21 字數 2791 閱讀 1751

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

hlog

最核心的是呼叫

dowrite

的方法,任何對資料改動的操作都就將首先呼叫這個方法。

出於效能考慮,

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 修指甲 別亂想,博...