這篇文章主要講解了“Hbase的WAL在RegionServer怎么調(diào)用”,文中的講解內(nèi)容簡單清晰,易于學(xué)習(xí)與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學(xué)習(xí)“Hbase的WAL在RegionServer怎么調(diào)用”吧!
創(chuàng)新新互聯(lián),憑借十多年的成都網(wǎng)站建設(shè)、網(wǎng)站制作經(jīng)驗(yàn),本著真心·誠心服務(wù)的企業(yè)理念服務(wù)于成都中小企業(yè)設(shè)計(jì)網(wǎng)站有千余家案例。做網(wǎng)站建設(shè),選成都創(chuàng)新互聯(lián)。
Hbase是一個(gè)高可靠性、高性能、面向列、可伸縮的分布式存儲(chǔ)系統(tǒng),利用HBase技術(shù)可在廉價(jià)PC Server上搭建起大規(guī)模結(jié)構(gòu)化存儲(chǔ)集群。
hbase是基于LSM樹的存儲(chǔ)系統(tǒng),它使用日志文件和內(nèi)存存儲(chǔ)來的存儲(chǔ)架構(gòu)將隨機(jī)寫轉(zhuǎn)換成順序?qū)?,以此保證穩(wěn)定的數(shù)據(jù)插入速率。而這里說的日志文件即是wal文件,用于在服務(wù)器崩潰后回滾還沒持久化的數(shù)據(jù)。
WAL(Write-Ahead-Log)是HBase的RegionServer在處理數(shù)據(jù)插入和刪除的過程中用來記錄操作內(nèi)容的一種日志。大致過程如下圖所示,首先客戶端啟動(dòng)一個(gè)操作來修改數(shù)據(jù),每一個(gè)修改都封裝到KeyValue對象實(shí)例中,并通過RPC調(diào)用發(fā)送到含有匹配Region的HRegionServer。一旦KeyValue到達(dá),它們就會(huì)被發(fā)送管理相應(yīng)行的HRegion實(shí)例。數(shù)據(jù)被寫到WAL,然后被放入到實(shí)際擁有記錄的存儲(chǔ)文件的MemStore中。同時(shí)還會(huì)檢查MemStore是否滿了,如果滿了就會(huì)被刷寫到磁盤中去。
本節(jié)將從源碼角度如上所簡述分析hbase的一個(gè)“寫”過程。
其中基本調(diào)用過程如下:
put/delet等“寫”操作會(huì)使用MultiRowMutationService這個(gè)service來作用,在service中將會(huì)調(diào)用mutateRows()方法去處理List,真正調(diào)用mutateRows()的是MultiRowMutationService的一個(gè)實(shí)現(xiàn)類MultiRowMutationEndpoint,MultiRowMutationEndpoint類實(shí)現(xiàn)了hbase的行事務(wù)。從MultiRowMutationEndpoint類文檔可以看出其主要作用:
其中processor的實(shí)現(xiàn)類是MultiRowMutationProcessor。
雖然processRowsWithLocks方法步驟很多,但是最關(guān)鍵的是如下幾步:
在這里將會(huì)把List放入,但是這里并不是真正的放到了memstore,真正的執(zhí)行會(huì)等sync()方法把日志或者說WALEdite真正刷入磁盤后,通過mvcc版本號(hào)異步通知再把數(shù)據(jù)寫到memstore。
在這步中會(huì)會(huì)調(diào)用syncOrDefer方法,除了metaRegion,syncOrDefer將根據(jù)client設(shè)置的持久化等級(jí)選擇是否調(diào)用wal(FSHLog)的sync方法
HBase中可以通過設(shè)置WAL的持久化等級(jí)決定是否開啟WAL機(jī)制、以及HLog的落盤方式。
client可以通過設(shè)置WAL持久化等級(jí),如代碼:put.setDurability(Durability. SYNC_WAL );
1.1.3版本的WAL的持久化等級(jí)分為如下四個(gè)等級(jí):
USER_DEFAULT
:默認(rèn)如果用戶沒有指定持久化等級(jí),HBase使用SYNC_WAL等級(jí)持久化數(shù)據(jù)。
SKIP_WAL
:只寫緩存,不寫HLog日志。這種方式因?yàn)橹粚憙?nèi)存(memstore),因此可以提升寫入性能,但是數(shù)據(jù)有丟失的風(fēng)險(xiǎn)。
ASYNC_WAL
:異步將數(shù)據(jù)寫入HLog日志中。
SYNC_WAL
:同步將數(shù)據(jù)寫入日志文件中,有可能只是被寫入文件系統(tǒng)中,并沒有真正落盤。
FSYNC_WAL
:同步將數(shù)據(jù)寫入日志文件并強(qiáng)制落盤。最嚴(yán)格的日志寫入等級(jí),可以保證數(shù)據(jù)不會(huì)丟失,但是性能相對比較差。
如代碼中所示當(dāng)前sync_wal和fsync_wal采用的是同一策略都是:調(diào)用HFLog的sync()方法。sync()是一個(gè)阻塞方法,需要等到數(shù)據(jù)真正的刷到磁盤后,便會(huì)喚醒它,然后工作線程返回寫入memstore,完成一次“寫”操作。
感謝各位的閱讀,以上就是“Hbase的WAL在RegionServer怎么調(diào)用”的內(nèi)容了,經(jīng)過本文的學(xué)習(xí)后,相信大家對Hbase的WAL在RegionServer怎么調(diào)用這一問題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!