HBase的Write Ahead Log (WAL),hbasewal

來源:互聯網
上載者:User

HBase的Write Ahead Log (WAL),hbasewal

HBase的資料寫入操作,會先記錄到HLog中,再真正寫入到MemStore中。
前者是對寫入友好的格式,後者是對查詢友好的格式。所以前者輸送量更高,寫入成功率大,提高了系統的可靠性,“基本”可以實現宕機後繼續沒有完成的資料更新操作。

API

WAL interface提供了對外的WAL API。
其中最常用的方法是append()。

long append(HRegionInfo info, WALKey key, WALEdit edits, boolean inMemstore) throws IOException;

它追加寫入一系列WALEdit。

API的調用方

每一個HBase region有一個單獨的WAL interface的執行個體:

HBase用戶端 == Protobuf協議 ==> HRegionServer.execRegionServerService() => MultiRowMutationProtos.callMethod() => MultiRowMutationProtos.mutateRows()=> MultiRowMutationEndpoint.mutateRows() => HRegion.processRowsWithLocks() =>HRegion.doWALAppend()會寫入WAL。

HRegion.processRowsWithLocks()是HRegion更新操作的總控方法——驅動了 擷取所、寫入WAL、寫入MemStore 這一流程。

 

 

原子性

為了實現HBase寫入一行裡的多個列時的原子性,對一行上所有列(即所有KeyValue)的更新操作,都包含在同一個WALEdit對象中:

所以WALEdit中最主要的成員變數,是一系列KeyValue(也就是Cell)的集合:

 

AbstractFSWAL —— 為基於檔案系統的WAL實現,提供通用支援AbstractFSWAL.findRegionsToForceFlush() - 返回當前WAL執行個體中最老的檔案所包含的、還完全被Flush掉的Region

所謂Flush應該是指將這個Region的業務資料從MemStore寫入Store。

如果一個Region被Flush了,那麼其業務資料已經落地到了HFile中。則這個Region的WAL日誌(資料操作記錄)就沒有必要存在了,可以刪除,以騰出磁碟空間。

AbstractFSWAL.findRegionsToForceFlush() 用於找到已經被Flush的、相應WAL日誌可以被刪除的Region。

 

1. 從AbstractFWSAL.byWalRegionSequenceIds找到第一個檔案。

ConcurrentNavigableMap<Path, Map<byte[], Long>> byWalRegionSequenceIds 維護了當前WAL的所有檔案,以及每個檔案所涉及的Region (包括Region的byte[]名稱和這個Region中最後一次append操作的sequence id)

即 Path (WAL檔案名稱) =>  (byte[] 地區名稱, Long sequence id)

 

2. 從第一個檔案,找到它的所有Region中,哪些還沒有被Flush

 ConcurrentMap<byte[], ConcurrentMap<byte[], Long>> AbstractFWSAL.SequenceIdAccounting.lowestUnflushedSequenceIds 維護了byte[] 地區名稱 + byte[] family名稱 到第一個(即最小的)沒有被Flush的sequence id的映射,稱為lowestUnflushedSequenceId。這裡,每一次append操作對應一個自增的sequence id。所有大於等於lowestUnflushedSequenceId的sequence id,其對應的append操作都沒有被Flush。

因此對於第一步得到的第一個WAL記錄檔所涉及的所有Region, 和每個Region的最大sequence id,如果這個最大的sequece id大於這個Region的lowestUnflushedSequenceId,說明這個Region有WAL日誌還沒有被Flush。那麼這個Region就會被包含在findRegionsToForceFlush()的結果中。

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.