亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法

文檔序號:6540608閱讀:213來源:國知局
一種基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法
【專利摘要】本發(fā)明公開了一種基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法,HBase的數(shù)據(jù)節(jié)點(diǎn)寫入時(shí),首先通過分布式系統(tǒng)封裝日志記錄,并通過網(wǎng)絡(luò)把日志備份到預(yù)先指定的遠(yuǎn)程節(jié)點(diǎn),保證數(shù)據(jù)的可用性和持久性,并以此為基礎(chǔ),把大量用戶數(shù)據(jù)和日志記錄暫存在內(nèi)存中,減少數(shù)據(jù)處理過程中的數(shù)據(jù)持久化進(jìn)程;當(dāng)HBase的數(shù)據(jù)節(jié)點(diǎn)處于空閑的時(shí)候,主動把內(nèi)存中的數(shù)據(jù)持久化到文件系統(tǒng),減輕內(nèi)存存儲壓力,減少寫操作過程中發(fā)生持久化進(jìn)程的頻率,提高數(shù)據(jù)寫入的時(shí)間性能。這種基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法保證了數(shù)據(jù)的可用性、持久性,大大提高數(shù)據(jù)寫入速度、提高系統(tǒng)性能。
【專利說明】一種基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及一種基于遠(yuǎn)程日志備份的非關(guān)系型數(shù)據(jù)庫數(shù)據(jù)可用性和持久性的解決方案,尤其涉及一種基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法。
【背景技術(shù)】
[0002]非關(guān)系型數(shù)據(jù)庫是指有別于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫的一種新型數(shù)據(jù)庫,在海量數(shù)據(jù)存儲、高并發(fā)訪問支持等方面表現(xiàn)出很好的性能。HBase,也就是Hadoop Database,是一種基于列存儲的非關(guān)系型數(shù)據(jù)庫。HBase是Apache Hadoop的子項(xiàng)目,在Hadoop架構(gòu)中處于結(jié)構(gòu)化存儲層:下層需要=依托分布式文件系統(tǒng)HDFS ;為上層的MapReduce計(jì)算模塊提供高性能、高可靠、高可擴(kuò)展性、基于列存儲的分布式存儲系統(tǒng)。HBase可以存儲結(jié)構(gòu)化數(shù)據(jù),也可以存儲半結(jié)構(gòu)化或者非結(jié)構(gòu)化的數(shù)據(jù)。此外,HBase中表會被分割為子表,即HRegion ;MemStore為HRegion所擁有的實(shí)例;WALEdit主體為KeyValue的List,記錄了系統(tǒng)的日志信息;applyFamiIyMapToMemstore方法為數(shù)據(jù)寫入內(nèi)存Memstore的方法;WALEdit類主體為KeyValue的List,記錄了系統(tǒng)的日志信息;addFamiIyMapToWALEdit方法為構(gòu)造數(shù)據(jù)并寫入WALEdit的方法;append方法為添加信息的方法;startRLP方法為將日志數(shù)據(jù)通過備份進(jìn)程接口備份到遠(yuǎn)程節(jié)點(diǎn)的方法。
[0003]當(dāng)前HBase采用數(shù)據(jù)持久化保證數(shù)據(jù)持久性和基本可用性,并用預(yù)寫日志機(jī)制進(jìn)一步保證數(shù)據(jù)可用性。雖然這套可用性、持久性解決方案能夠保證數(shù)據(jù)持久性和基本可用性,但是其在數(shù)據(jù)處理過程中引入大量的持久化進(jìn)程,這些持久化進(jìn)程是磁盤寫操作,會大大降低了系統(tǒng)寫操作的時(shí)間性能和用戶體驗(yàn)。所以更加高效的可用性、持久性方案非常需
要關(guān)注。

【發(fā)明內(nèi)容】

[0004]本發(fā)明所要解決的技術(shù)問題是,提供一種能夠提高寫操作的時(shí)間性能的基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法。
[0005]為了解決上述技術(shù)問題,本發(fā)明是通過以下技術(shù)方案實(shí)現(xiàn)的:
[0006]一種基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法,HBase的數(shù)據(jù)節(jié)點(diǎn)寫入時(shí),首先把數(shù)據(jù)暫存在內(nèi)存中,通過分布式系統(tǒng)封裝日志記錄,并通過網(wǎng)絡(luò)把日志備份到預(yù)先指定的遠(yuǎn)程節(jié)點(diǎn),保證數(shù)據(jù)的可用性和持久性,并以此為基礎(chǔ),把大量用戶數(shù)據(jù)和日志記錄暫存在內(nèi)存中,減少數(shù)據(jù)處理過程中的數(shù)據(jù)持久化進(jìn)程;當(dāng)HBase的數(shù)據(jù)節(jié)點(diǎn)處于空閑狀態(tài)的時(shí)候,主動把內(nèi)存中暫存的數(shù)據(jù)持久化到文件系統(tǒng),減輕內(nèi)存存儲壓力,減少寫操作過程中發(fā)生持久化進(jìn)程的頻率,提高數(shù)據(jù)寫入的時(shí)間性能。
[0007]優(yōu)選的,所述HBase的數(shù)據(jù)節(jié)點(diǎn)寫入并備份包括以下流程:
[0008]a、HBase的數(shù)據(jù)節(jié)點(diǎn)啟動,并且初始化遠(yuǎn)程日志備份進(jìn)程,即啟動遠(yuǎn)程日志備份服務(wù),作為集群中某個或多個節(jié)點(diǎn)遠(yuǎn)程備份日志的目標(biāo)節(jié)點(diǎn);同時(shí)獲取當(dāng)前節(jié)點(diǎn)備份日志的目標(biāo)節(jié)點(diǎn)或節(jié)點(diǎn)群的IP,作為整個HBase的數(shù)據(jù)節(jié)點(diǎn)上所有HRegion發(fā)起遠(yuǎn)程日志備份時(shí)
共享的變量;
[0009]b、當(dāng)HRegion調(diào)用寫操作處理過程時(shí),把用戶數(shù)據(jù)寫入內(nèi)存存儲單元,然后構(gòu)造日志記錄WAL寫入本地節(jié)點(diǎn)內(nèi)存,不發(fā)起不等待日志持久化進(jìn)程;而是把WAL及相關(guān)信息發(fā)送到遠(yuǎn)程備份節(jié)點(diǎn),并等待備份節(jié)點(diǎn)發(fā)來的寫入確認(rèn);
[0010]C、當(dāng)HBase的數(shù)據(jù)節(jié)點(diǎn)接收到集群中某個節(jié)點(diǎn)發(fā)來的WAL時(shí),把它寫入本地日志文件,立即返回寫入確認(rèn),日志同步進(jìn)程稍后會把日志及時(shí)寫入文件系統(tǒng);
[0011]d、如果HRegion的寫操作進(jìn)程在規(guī)定時(shí)間內(nèi)收到超過一半的目標(biāo)節(jié)點(diǎn)返回的寫確認(rèn)就認(rèn)為遠(yuǎn)程日志備份成功,并返回寫操作成功;否則認(rèn)為備份失敗,并返回寫操作失敗。
[0012]優(yōu)選的,所述步驟b和步驟d中HRegion的寫操作包括以下步驟:
[0013]1、首先嘗試獲取需要的鎖;
[0014]2、檢查HRegion和HBase的數(shù)據(jù)節(jié)點(diǎn)狀態(tài),此時(shí)檢查是否需要持久化;
[0015]3、更新時(shí)間戳;
[0016]4、數(shù)據(jù)寫入內(nèi)存 MemStore,即執(zhí)行 applyFamiIyMapToMemstore 方法;
[0017]5、隨后構(gòu)造并寫 WALEdit,執(zhí)行 addFamiIyMapToWALEdit 方法;
[0018]6、通過append方法把WAL日志寫入本地日志系統(tǒng),但不會持久化;
[0019]7、構(gòu)造遠(yuǎn)程日志備份數(shù)據(jù),調(diào)用StartRLP方法把日志數(shù)據(jù)通過備份進(jìn)程接口備份到遠(yuǎn)程節(jié)點(diǎn);如果返回true則寫操作執(zhí)行成功,否則執(zhí)行失敗,且無論成功與否都要釋放行鎖定。
[0020]優(yōu)選的,所述日志備份過程中傳輸?shù)臄?shù)據(jù)包括日志數(shù)據(jù)單元、確認(rèn)數(shù)據(jù)及日志同步通知。
[0021]優(yōu)選的,所述HBase的數(shù)據(jù)節(jié)點(diǎn)包括空存儲狀態(tài)、存儲狀態(tài)、預(yù)備持久化狀態(tài)和持久化狀態(tài)四種狀態(tài);所述HBase的數(shù)據(jù)節(jié)點(diǎn)處于空存儲狀態(tài)時(shí),如果接收到的是讀操作請求,HBase的數(shù)據(jù)節(jié)點(diǎn)承載的MemStore中沒有寫入數(shù)據(jù)、還是空置的,所以HBase的數(shù)據(jù)節(jié)點(diǎn)仍然處在空存儲狀態(tài);當(dāng)HBase的數(shù)據(jù)節(jié)點(diǎn)處于空存儲狀態(tài)時(shí),如果HBase的數(shù)據(jù)節(jié)點(diǎn)接收到寫操作請求,就會有用戶數(shù)據(jù)寫入某個或某幾個MemStore,此時(shí)HBase的數(shù)據(jù)節(jié)點(diǎn)轉(zhuǎn)入存儲狀態(tài),若處于存儲狀態(tài)的HBase的數(shù)據(jù)節(jié)點(diǎn)沒有任何的操作正在進(jìn)行,也沒有任何的請求需要響應(yīng),則進(jìn)入預(yù)備持久化狀態(tài);如果HBase的數(shù)據(jù)節(jié)點(diǎn)處于預(yù)備持久化狀態(tài),則會判斷當(dāng)前待持久化隊(duì)列是否為空,如果待持久化隊(duì)列為空,則直接轉(zhuǎn)入空存儲狀態(tài),如果隊(duì)列不為空則啟動等待計(jì)時(shí)器,如果等待計(jì)時(shí)器時(shí)間到達(dá),節(jié)點(diǎn)仍然沒有正在運(yùn)行的任務(wù)或者沒有收到任何操作請求,節(jié)點(diǎn)會啟動持久化進(jìn)程,把日志寫入文件系統(tǒng),當(dāng)前的HBase的數(shù)據(jù)節(jié)點(diǎn)進(jìn)入持久化狀態(tài);當(dāng)處于預(yù)備持久化狀態(tài)的HBase的數(shù)據(jù)節(jié)點(diǎn)在等待計(jì)時(shí)的過程中,如果有讀寫請求或者節(jié)點(diǎn)需要運(yùn)行其他任務(wù),則立即停止等待計(jì)時(shí),節(jié)點(diǎn)終止預(yù)備持久化狀態(tài)、重新進(jìn)入存儲狀態(tài);而處于持久化狀態(tài)的HBase的數(shù)據(jù)節(jié)點(diǎn)不會被中斷,直至完成了一個持久化過程,比如把日志文件或者某個HRegion的MemStore數(shù)據(jù)全部寫入了文件系統(tǒng),則重新轉(zhuǎn)入預(yù)備持久化狀態(tài)。
[0022]與現(xiàn)有技術(shù)相比,本發(fā)明的有益之處在于:這種基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法通過節(jié)點(diǎn)間日志備份,保證了數(shù)據(jù)的可用性、持久性,通過把數(shù)據(jù)暫存在內(nèi)存中、減少數(shù)據(jù)處理過程中的持久化頻率,可以大大提高數(shù)據(jù)寫入速度、提高系統(tǒng)性能,同時(shí)能夠改善數(shù)據(jù)寫入時(shí)間對MemStore大小的敏感度;通過節(jié)點(diǎn)空閑時(shí)主動把內(nèi)存數(shù)據(jù)持久化到文件系統(tǒng),減輕內(nèi)存壓力,減少數(shù)據(jù)寫入過程中的持久化頻率,提高系統(tǒng)寫操作的時(shí)間性能。
【專利附圖】

【附圖說明】
[0023]下面結(jié)合附圖對本發(fā)明進(jìn)一步說明。
[0024]圖1是基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法示意圖;
[0025]圖2是基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法中的數(shù)據(jù)寫入過程流程圖;
[0026]圖3是基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法中日志備份的節(jié)點(diǎn)通信示意圖;
[0027]圖4是基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法中節(jié)點(diǎn)狀態(tài)和狀態(tài)轉(zhuǎn)換示意圖。
【具體實(shí)施方式】
[0028]下面結(jié)合附圖和【具體實(shí)施方式】對本發(fā)明進(jìn)行詳細(xì)描述。
[0029]如圖1所示一種基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法,HBase的數(shù)據(jù)節(jié)點(diǎn)寫入時(shí),首先通過分布式系統(tǒng)封裝日志記錄,并通過網(wǎng)絡(luò)把日志備份到預(yù)先指定的遠(yuǎn)程節(jié)點(diǎn),保證數(shù)據(jù)的可用性和持久性,并以此為基礎(chǔ),把大量用戶數(shù)據(jù)和日志記錄暫存在內(nèi)存中,減少數(shù)據(jù)處理過程中的數(shù)據(jù)持久化進(jìn)程;當(dāng)HBase的數(shù)據(jù)節(jié)點(diǎn)處于空閑的時(shí)候,主動把內(nèi)存中的數(shù)據(jù)持久化到文件系統(tǒng),減輕內(nèi)存存儲壓力,減少寫操作過程中發(fā)生持久化進(jìn)程的頻率,提高數(shù)據(jù)寫入的時(shí)間性能。所述HBase的數(shù)據(jù)節(jié)點(diǎn)處理分為兩個階段;第一階段時(shí),HBase的數(shù)據(jù)節(jié)點(diǎn)把數(shù)據(jù)暫存在內(nèi)存中,并封裝日志記錄備份到遠(yuǎn)程節(jié)點(diǎn);第二階段時(shí),HBase的數(shù)據(jù)節(jié)點(diǎn)處于空閑狀態(tài)時(shí),主動把內(nèi)存中的暫存的數(shù)據(jù)持久化到文件系統(tǒng)。
[0030]所述HBase的數(shù)據(jù)節(jié)點(diǎn)寫入并備份包括以下流程:
[0031]a、HBase的數(shù)據(jù)節(jié)點(diǎn)啟動,并且初始化遠(yuǎn)程日志備份進(jìn)程,即啟動遠(yuǎn)程日志備份服務(wù),作為集群中某個或多個節(jié)點(diǎn)遠(yuǎn)程備份日志的目標(biāo)節(jié)點(diǎn);同時(shí)獲取當(dāng)前節(jié)點(diǎn)備份日志的目標(biāo)節(jié)點(diǎn)或節(jié)點(diǎn)群的IP,作為整個HBase的數(shù)據(jù)節(jié)點(diǎn)上所有HRegion發(fā)起遠(yuǎn)程日志備份時(shí)共享的變量;
[0032]b、當(dāng)HRegion調(diào)用寫操作處理過程時(shí),把用戶數(shù)據(jù)寫入內(nèi)存存儲單元,然后構(gòu)造日志記錄WAL寫入本地節(jié)點(diǎn)內(nèi)存,不發(fā)起不等待日志持久化進(jìn)程;而是把WAL及相關(guān)信息發(fā)送到遠(yuǎn)程備份節(jié)點(diǎn),并等待備份節(jié)點(diǎn)發(fā)來的寫入確認(rèn);
[0033]C、當(dāng)HBase的數(shù)據(jù)節(jié)點(diǎn)接收到集群中某個節(jié)點(diǎn)發(fā)來的WAL時(shí),把它寫入本地日志文件,立即返回寫入確認(rèn),日志同步進(jìn)程稍后會把日志及時(shí)寫入文件系統(tǒng);
[0034]d、如果HRegion的寫操作進(jìn)程在規(guī)定時(shí)間內(nèi)收到超過一半的目標(biāo)節(jié)點(diǎn)返回的寫確認(rèn)就認(rèn)為遠(yuǎn)程日志備份成功,并返回寫操作成功;否則認(rèn)為備份失敗,并返回寫操作失敗。
[0035]如圖2所示,所述HRegion的寫操作包括以下步驟:[0036]1、首先嘗試獲取需要的鎖;
[0037]2、檢查HRegion和HBase的數(shù)據(jù)節(jié)點(diǎn)狀態(tài),此時(shí)檢查是否需要持久化;
[0038]3、更新時(shí)間戳;
[0039]4、數(shù)據(jù)寫入內(nèi)存 MemStore,即執(zhí)行 applyFamiIyMapToMemstore 方法;
[0040]5、隨后構(gòu)造并寫 WALEdit,執(zhí)行 addFamiIyMapToWALEdit 方法;
[0041]6、通過append方法把WAL日志寫入本地日志系統(tǒng),但不會持久化;
[0042]7、構(gòu)造遠(yuǎn)程日志備份數(shù)據(jù),調(diào)用StartRLP方法把日志數(shù)據(jù)通過備份進(jìn)程接口備份到遠(yuǎn)程節(jié)點(diǎn);如果返回true則寫操作執(zhí)行成功,否則執(zhí)行失敗,且無論成功與否都要釋放行鎖定。
[0043]結(jié)合本發(fā)明所構(gòu)筑的平臺體系結(jié)構(gòu)來看,在日志備份過程中需要設(shè)計(jì)一個輕型的客戶端,所述客戶端程序需要完成如下功能:
[0044]—、封裝并備份日志記錄及相關(guān)信息。HBase節(jié)點(diǎn)處理寫操作請求的過程中,需要封裝日志記錄及相關(guān)信息,包括日志記錄WAL,數(shù)據(jù)表信息、HRegion信息、集群信息等。隨后HBase節(jié)點(diǎn)需要通過網(wǎng)絡(luò)程序接口把封裝好的日志數(shù)據(jù)立即備份到預(yù)先指定的遠(yuǎn)程節(jié)點(diǎn)。遠(yuǎn)程備份節(jié)點(diǎn)有系統(tǒng)預(yù)先分配,通常這些遠(yuǎn)程備份節(jié)點(diǎn)不止一個。
[0045]二、等待遠(yuǎn)程備份節(jié)點(diǎn)返回的確認(rèn)信息。備份節(jié)點(diǎn)接收到日志數(shù)據(jù)后會為源節(jié)點(diǎn)構(gòu)造并返回一個確認(rèn)信息。所以HBase客戶端節(jié)點(diǎn)還需要等待來自遠(yuǎn)程備份節(jié)點(diǎn)的確認(rèn)信息,并根據(jù)確認(rèn)信息的狀態(tài)判斷寫操作的最終狀態(tài):至少要有一半以上的節(jié)點(diǎn)備份成功才能認(rèn)為寫操作是成功的,否則寫操作返回失敗。
[0046]三、發(fā)送同步信息到遠(yuǎn)程備份節(jié)點(diǎn)。當(dāng)HBase節(jié)點(diǎn)發(fā)起了持久化進(jìn)程,其部分日志數(shù)據(jù)就可以刪除,所以節(jié)點(diǎn)需要以客戶端的身份把持久化信息告知自己的備份節(jié)點(diǎn)。
[0047]所述服務(wù)器端程序需要完成如下功能:
[0048]一、存儲遠(yuǎn)程節(jié)點(diǎn)備份的日志記錄。服務(wù)端接收遠(yuǎn)程節(jié)點(diǎn)發(fā)送過來的日志數(shù)據(jù),并把它們寫入本地日志系統(tǒng),隨后立即向源節(jié)點(diǎn)返回確認(rèn)信息:告知源節(jié)點(diǎn)是否成功接收了備份的日志數(shù)據(jù)。寫入日志記錄的時(shí)候需要表信息、HRegion信息等數(shù)據(jù),所以接收到的日志數(shù)據(jù)必須包括這些信息。
[0049]二、響應(yīng)遠(yuǎn)程節(jié)點(diǎn)的同步信息。向客戶端軟件分發(fā)密鑰及哈希函數(shù):服務(wù)器端為每位客戶生成2個哈希函數(shù)及2個主密鑰,發(fā)送給客戶端服務(wù)程序。
[0050]三、響應(yīng)遠(yuǎn)程節(jié)點(diǎn)的日志讀取操作。HBase的備份節(jié)點(diǎn)要有效的響應(yīng)遠(yuǎn)程節(jié)點(diǎn)的日志讀取請求:即把本節(jié)點(diǎn)為指定表和HRegion保存的日志記錄按照給定的序列數(shù)要求讀出并通過網(wǎng)絡(luò)接口返回給源節(jié)點(diǎn)。
[0051]當(dāng)上述客戶端與服務(wù)器端進(jìn)行通信時(shí),在基于遠(yuǎn)程日志備份的數(shù)據(jù)可用性、持久性方案中,日志備份時(shí)的節(jié)點(diǎn)通信通過網(wǎng)絡(luò)傳輸方式實(shí)現(xiàn)。
[0052]所述日志備份過程中傳輸?shù)臄?shù)據(jù)主要包括:
[0053]1、日志數(shù)據(jù)單元(Log Data Unit)。日志數(shù)據(jù)單元是包含了 HBase預(yù)寫日志W(wǎng)AL信息的數(shù)據(jù),是遠(yuǎn)程備份過程中由客戶端封裝并發(fā)往遠(yuǎn)程節(jié)點(diǎn)保存的日志數(shù)據(jù)。它的數(shù)據(jù)包括數(shù)據(jù)幀序號、日志記錄、表的名稱、HRegion信息等。具體描述如下:
[0054]數(shù)據(jù)幀序號ID:也是該日志數(shù)據(jù)的唯一標(biāo)識符,用于客戶端和服務(wù)端通信時(shí)進(jìn)行數(shù)據(jù)幀的確認(rèn);[0055]日志記錄單元:記錄了 HBase日志信息WALEdit, WALEdit封裝了一個KeyValue鍵值對列表,里面記錄了系統(tǒng)的日志信息,是日志數(shù)據(jù)單元的核心數(shù)據(jù);
[0056]表的名稱:被操作的數(shù)據(jù)表名稱,是一個字節(jié)數(shù)組;
[0057]HRegion信息:是HRegionInfo的一個對象,描述了被操作HRegion的信息,包括Region名稱、Region的ID、Region的起始和結(jié)束鍵值、是否離線等信息;
[0058]集群ID:ClusterId ;
[0059]isDeferredLog:布爾型變量,表示日志是否是延遲日志;
[0060]時(shí)間信息now:當(dāng)前毫秒數(shù),為了保證數(shù)據(jù)的一直,時(shí)間信息在客戶端發(fā)起RLP過程的時(shí)候?qū)懭搿?br> [0061]2、確認(rèn)數(shù)據(jù)(ACK)。確認(rèn)數(shù)據(jù)ACK用于遠(yuǎn)程備份過程中的服務(wù)端向客戶端確認(rèn)已經(jīng)收到發(fā)來的日志數(shù)據(jù)。當(dāng)服務(wù)端接收了來自源節(jié)點(diǎn)的日志數(shù)據(jù)后,會在寫入日志系統(tǒng)后直接構(gòu)造并發(fā)送一個確認(rèn)數(shù)據(jù):數(shù)據(jù)類型即確認(rèn)幀ACK,然后把源節(jié)點(diǎn)日志數(shù)據(jù)中數(shù)據(jù)幀序號取出作為確認(rèn)數(shù)據(jù)幀的序號,隨后發(fā)回源節(jié)點(diǎn)。確認(rèn)數(shù)據(jù)幀的結(jié)構(gòu)很簡單,包括一個類型標(biāo)識符、一個數(shù)據(jù)巾貞序號和一個成功與否的標(biāo)識:
[0062]數(shù)據(jù)幀序號ID:告訴源節(jié)點(diǎn)確認(rèn)的具體對象,從接收到的日志數(shù)據(jù)單元中直接取出。
[0063]isSucc:布爾型變量,接收到的日志記錄是否成功寫入內(nèi)存。
[0064]3、日志同步通知(Log Sync Notification)。日志同步通知是節(jié)點(diǎn)執(zhí)行持久化進(jìn)程后主動的構(gòu)造并發(fā)送給遠(yuǎn)程備份節(jié)點(diǎn)的同志信息,告知備份節(jié)點(diǎn)序列數(shù)小于給定值的日志記錄都可以棄置。其數(shù)據(jù)字段如下:
[0065]序列數(shù):與已經(jīng)持久化數(shù)據(jù)相關(guān)的最大日志記錄序列數(shù)。
[0066]HRegion名稱:執(zhí)行持久化進(jìn)程的HRegion名稱,用字節(jié)數(shù)組表示。
[0067]表名稱:執(zhí)行持久化進(jìn)程的表的名稱,用字節(jié)數(shù)組表示。
[0068]isMetaRegion:布爾類型變量,標(biāo)識是否是元數(shù)據(jù)Region。
[0069]如圖3所示,所述客戶端和服務(wù)端的通信過程主要分為兩種,遠(yuǎn)程備份日志和日志持久化同步通知,具體地:
[0070]所述遠(yuǎn)程備份日志,即處理寫操作的過程中,客戶端把日志記錄封裝成日志數(shù)據(jù)單元(LDU)并備份到預(yù)先指定的遠(yuǎn)程節(jié)點(diǎn);服務(wù)端接收到日志數(shù)據(jù)單元后會把具體數(shù)據(jù)取出,寫入本地日志文件;隨后服務(wù)端構(gòu)造確認(rèn)數(shù)據(jù)ACK返回給客戶端節(jié)點(diǎn)。
[0071]所述日志持久化同步通知,即節(jié)點(diǎn)成功執(zhí)行一次持久化進(jìn)程后,日志中的相關(guān)記錄就可以考慮清理,所以此時(shí)節(jié)點(diǎn)需要以客戶端的身份構(gòu)造日志同步通知(LSN)告知遠(yuǎn)程備份節(jié)點(diǎn)相關(guān)的持久化信息;遠(yuǎn)程節(jié)點(diǎn)接收到日志同步通知后取出其中的序列數(shù),并把持久化信息寫入本地日志文件。
[0072]這種基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法其節(jié)點(diǎn)處于空閑狀態(tài)時(shí),會主動發(fā)起節(jié)點(diǎn)日志和數(shù)據(jù)的持久化進(jìn)程,減輕節(jié)點(diǎn)內(nèi)存存儲壓力,減少寫操作過程中因?yàn)閮?nèi)存壓力執(zhí)行持久化進(jìn)程的頻率。
[0073]如圖4所示,所述HBase的數(shù)據(jù)節(jié)點(diǎn)分為空存儲狀態(tài)、存儲狀態(tài)、預(yù)備持久化狀態(tài)和持久化狀態(tài);具體的:
[0074]所述空存儲狀態(tài)即節(jié)點(diǎn)承載的所有HRegion包含的MemStore都是空的,內(nèi)存里面沒有任何用戶數(shù)據(jù)需要持久化。
[0075]所述存儲狀態(tài)即節(jié)點(diǎn)承載的HRegion中有部分或者全部的MemStore存儲有用戶數(shù)據(jù),與空存儲狀態(tài)的區(qū)別就是節(jié)點(diǎn)的MemStore是否存儲有數(shù)據(jù)。節(jié)點(diǎn)處于存儲狀態(tài)時(shí),節(jié)點(diǎn)需要持久化但是當(dāng)前有任務(wù)需要運(yùn)行所以不應(yīng)該執(zhí)行持久化進(jìn)程。
[0076]所述預(yù)備持久化狀態(tài)即存儲狀態(tài)的節(jié)點(diǎn),如果沒有任務(wù)正在進(jìn)行或者需要被調(diào)度運(yùn)行,那么節(jié)點(diǎn)進(jìn)入預(yù)備持久化狀態(tài):首先節(jié)點(diǎn)承載的HRegion中有數(shù)據(jù)是存儲在內(nèi)存中的,其次當(dāng)前節(jié)點(diǎn)沒有任何的任務(wù)在運(yùn)行或者需要運(yùn)行。
[0077]所述持久化狀態(tài)即持久化狀態(tài)下的節(jié)點(diǎn)正在進(jìn)行日志文件或者用戶數(shù)據(jù)持久化。此時(shí)是數(shù)據(jù)庫寫文件系統(tǒng)的時(shí)候,不可以被打斷直到一次持久化進(jìn)程完全結(jié)束。
[0078]所述HBase的數(shù)據(jù)節(jié)點(diǎn)之間空存儲狀態(tài)、存儲狀態(tài)、預(yù)備持久化狀態(tài)和持久化狀態(tài)的轉(zhuǎn)換如下:
[0079]處于空存儲狀態(tài)的節(jié)點(diǎn)如果接收到的是讀操作請求,節(jié)點(diǎn)承載的MemStore中沒有寫入數(shù)據(jù)、還是空置的,所以節(jié)點(diǎn)仍然處在空存儲狀態(tài)。
[0080]處于空存儲狀態(tài)的節(jié)點(diǎn)如果接收到寫操作請求,就會有用戶數(shù)據(jù)寫入某個或某幾個MemStore,此時(shí)節(jié)點(diǎn)轉(zhuǎn)入存儲狀態(tài)。
[0081]處于存儲狀態(tài)的節(jié)點(diǎn)如果沒有任何的操作正在進(jìn)行,也沒有任何的請求需要響應(yīng),則進(jìn)入預(yù)備持久化狀態(tài)。
[0082]處于預(yù)備持久化狀態(tài)的節(jié)點(diǎn),會判斷當(dāng)前待持久化隊(duì)列是否為空。如果待持久化隊(duì)列為空,則直接轉(zhuǎn)入空存儲狀態(tài)。如果隊(duì)列不為空則啟動等待計(jì)時(shí)器。如果等待計(jì)時(shí)器時(shí)間到達(dá),節(jié)點(diǎn)仍然沒有正在運(yùn)行的任務(wù)或者沒有收到任何操作請求,節(jié)點(diǎn)會啟動持久化進(jìn)程,把日志寫入文件系統(tǒng),當(dāng)前的HRegionServer節(jié)點(diǎn)進(jìn)入持久化狀態(tài)。
[0083]處于預(yù)備持久化狀態(tài)的節(jié)點(diǎn)在等待計(jì)時(shí)的過程中,如果有讀寫請求或者節(jié)點(diǎn)需要運(yùn)行其他任務(wù),則立即停止等待計(jì)時(shí),節(jié)點(diǎn)終止預(yù)備持久化狀態(tài)、重新進(jìn)入存儲狀態(tài)。
[0084]處于持久化狀態(tài)的節(jié)點(diǎn)不會被中斷,直至完成了一個持久化過程,比如把日志文件或者某個HRegion的MemStore數(shù)據(jù)全部寫入了文件系統(tǒng),則重新轉(zhuǎn)入預(yù)備持久化狀態(tài)。
[0085]HBase的數(shù)據(jù)節(jié)點(diǎn)在不同狀態(tài)下執(zhí)行的具體流程描述如下:
[0086]1、HBase的數(shù)據(jù)節(jié)點(diǎn)正常啟動后,啟動屬于當(dāng)前節(jié)點(diǎn)的持久化線程Flusher,并把節(jié)點(diǎn)狀態(tài)設(shè)置為空存儲狀態(tài),隨后開始偵聽當(dāng)前節(jié)點(diǎn)是否處于空閑狀態(tài),進(jìn)入步驟2 ;
[0087]2、等待并處理操作請求,如果HBase的數(shù)據(jù)節(jié)點(diǎn)收到寫操作請求后,轉(zhuǎn)入步驟4 ;如果收到的是讀操作請求,則轉(zhuǎn)入步驟3 ;
[0088]3、把節(jié)點(diǎn)狀態(tài)置為忙,響應(yīng)讀操作請求,保持節(jié)點(diǎn)原有狀態(tài)不變;如果原來狀態(tài)為空存儲狀態(tài),則轉(zhuǎn)入步驟2 ;如果原來狀態(tài)為預(yù)備持久化狀態(tài),則進(jìn)入步驟5 ;
[0089]4、把節(jié)點(diǎn)狀態(tài)置為忙;隨后處理寫操作流程;寫操作結(jié)束后節(jié)點(diǎn)狀態(tài)變成存儲狀態(tài),如果沒有讀寫請求,則開啟一個新的空閑寫過程,進(jìn)入步驟5 ;如果還有讀寫操作請求,執(zhí)行步驟2 ;
[0090]5、進(jìn)入預(yù)備持久化狀態(tài),如果當(dāng)前待持久化隊(duì)列為空,進(jìn)入步驟2 ;否則啟動等待計(jì)時(shí)器,并繼續(xù)偵聽等待讀寫操作請求:如果有接收到讀寫操作請求,重置Flusher線程包含的所有狀態(tài)為初始值,結(jié)束當(dāng)前的空閑寫過程,執(zhí)行步驟2 ;如果計(jì)時(shí)器已經(jīng)到時(shí)仍然沒有操作請求和正在運(yùn)行的任務(wù),則繼續(xù)進(jìn)行當(dāng)前空閑寫過程,重新執(zhí)行步驟6。[0091]6、進(jìn)入持久化狀態(tài),執(zhí)行持久化進(jìn)程。根據(jù)Flusher線程當(dāng)前狀態(tài),決定需要寫文件系統(tǒng)的對象:如果當(dāng)前是一個新的空閑寫過程,則把日志文件持久化;如果正在繼續(xù)運(yùn)行一個原有的空閑寫過程,則選擇一個HRegion把其內(nèi)存中的數(shù)據(jù)持久化到文件系統(tǒng)。持久化進(jìn)程結(jié)束后,進(jìn)入步驟5。
[0092]根據(jù)上述說明書的揭示和教導(dǎo),本發(fā)明所屬領(lǐng)域的技術(shù)人員還可以對上述實(shí)施方式進(jìn)行變更和修改。因此,本發(fā)明并不局限于上面揭示和描述的【具體實(shí)施方式】,對本發(fā)明的一些修改和變更也應(yīng)當(dāng)落入本發(fā)明的權(quán)利要求的保護(hù)范圍內(nèi)。此外,盡管本說明書中使用了一些特定的術(shù)語,但這些術(shù)語只是為了方便說明,并不對本發(fā)明構(gòu)成任何限制。
【權(quán)利要求】
1.一種基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法,其特征在于=HBase的數(shù)據(jù)節(jié)點(diǎn)寫入時(shí),首先把數(shù)據(jù)暫存在內(nèi)存中,通過分布式系統(tǒng)封裝日志記錄,并通過網(wǎng)絡(luò)把日志備份到預(yù)先指定的遠(yuǎn)程節(jié)點(diǎn);當(dāng)HBase的數(shù)據(jù)節(jié)點(diǎn)處于空閑狀態(tài)時(shí),主動把內(nèi)存中暫存的中的數(shù)據(jù)持久化到文件系統(tǒng)。
2.根據(jù)權(quán)利要求1所述的基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法,其特征在于:所述HBase的數(shù)據(jù)節(jié)點(diǎn)寫入并備份包括以下步驟: (a)HBase的數(shù)據(jù)節(jié)點(diǎn)啟動,并且初始化遠(yuǎn)程日志備份進(jìn)程,即啟動遠(yuǎn)程日志備份服務(wù),作為集群中某個或多個節(jié)點(diǎn)遠(yuǎn)程備份日志的目標(biāo)節(jié)點(diǎn);同時(shí)獲取當(dāng)前節(jié)點(diǎn)備份日志的目標(biāo)節(jié)點(diǎn)或節(jié)點(diǎn)群的IP,作為整個HBase的數(shù)據(jù)節(jié)點(diǎn)上所有HRegion發(fā)起遠(yuǎn)程日志備份時(shí)共享的變量; (b)當(dāng)HRegion調(diào)用寫操作處理過程時(shí),把用戶數(shù)據(jù)寫入內(nèi)存存儲單元,然后構(gòu)造日志記錄WAL寫入本地節(jié)點(diǎn)內(nèi)存,不發(fā)起不等待日志持久化進(jìn)程;而是把WAL及相關(guān)信息發(fā)送到遠(yuǎn)程備份節(jié)點(diǎn),并等待備份節(jié)點(diǎn)發(fā)來的寫入確認(rèn); (C)當(dāng)HBase的數(shù)據(jù)節(jié)點(diǎn)接收到集群中某個節(jié)點(diǎn)發(fā)來的WAL時(shí),把它寫入本地日志文件,立即返回寫入確認(rèn),日志同步進(jìn)程稍后會把日志及時(shí)寫入文件系統(tǒng); Cd)如果HRegion的寫操作進(jìn)程在規(guī)定時(shí)間內(nèi)收到超過一半的目標(biāo)節(jié)點(diǎn)返回的寫確認(rèn)就認(rèn)為遠(yuǎn)程日志備份成功,并返回寫操作成功;否則認(rèn)為備份失敗,并返回寫操作失敗。
3.根據(jù)權(quán)利要求2所述的基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法,其特征在于:所述步驟(b)和步驟(d)中HRegion的寫操作包括以下步驟: (1)首先嘗試獲取需要的鎖; (2)檢查HRegion和HBase的數(shù)據(jù)節(jié)點(diǎn)狀態(tài),此時(shí)檢查是否需要持久化; (3)更新時(shí)間戳; (4)數(shù)據(jù)寫入內(nèi)存MemStore,即執(zhí)行 applyFamiIyMapToMemstore 方法; (5)隨后構(gòu)造并寫WALEdit,執(zhí)行 addFamiIyMapToWALEdit 方法; (6)通過append方法把WAL日志寫入本地日志系統(tǒng),但不會持久化; (7)構(gòu)造遠(yuǎn)程日志備份數(shù)據(jù),調(diào)用StartRLP方法把日志數(shù)據(jù)通過備份進(jìn)程接口備份到遠(yuǎn)程節(jié)點(diǎn);如果返回true則寫操作執(zhí)行成功,否則執(zhí)行失敗,且無論成功與否都要釋放行鎖定。
4.根據(jù)權(quán)利要求1所述的基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法,其特征在于:所述日志備份過程中傳輸?shù)臄?shù)據(jù)包括日志數(shù)據(jù)單元、確認(rèn)數(shù)據(jù)及日志同步通知。
5.根據(jù)權(quán)利要求1所述的基于遠(yuǎn)程日志備份的HBase數(shù)據(jù)可用性及持久性的方法,其特征在于:所述HBase的數(shù)據(jù)節(jié)點(diǎn)包括空存儲狀態(tài)、存儲狀態(tài)、預(yù)備持久化狀態(tài)和持久化狀態(tài)四種狀態(tài);所述HBase的數(shù)據(jù)節(jié)點(diǎn)處于空存儲狀態(tài)時(shí),如果接收到的是讀操作請求,HBase的數(shù)據(jù)節(jié)點(diǎn)承載的MemStore中沒有寫入數(shù)據(jù)、還是空置的,所以HBase的數(shù)據(jù)節(jié)點(diǎn)仍然處在空存儲狀態(tài);當(dāng)HBase的數(shù)據(jù)節(jié)點(diǎn)處于空存儲狀態(tài)時(shí),如果HBase的數(shù)據(jù)節(jié)點(diǎn)接收到寫操作請求,就會有用戶數(shù)據(jù)寫入某個或某幾個MemStore,此時(shí)HBase的數(shù)據(jù)節(jié)點(diǎn)轉(zhuǎn)入存儲狀態(tài),若處于存儲狀態(tài)的HBase的數(shù)據(jù)節(jié)點(diǎn)沒有任何的操作正在進(jìn)行,也沒有任何的請求需要響應(yīng),則進(jìn)入預(yù)備持久化狀態(tài);如果HBase的數(shù)據(jù)節(jié)點(diǎn)處于預(yù)備持久化狀態(tài),則會判斷當(dāng)前待持久化隊(duì)列是否 為空,如果待持久化隊(duì)列為空,則直接轉(zhuǎn)入空存儲狀態(tài),如果隊(duì)列不為空則啟動等待計(jì)時(shí)器,如果等待計(jì)時(shí)器時(shí)間到達(dá),節(jié)點(diǎn)仍然沒有正在運(yùn)行的任務(wù)或者沒有收到任何操作請求,節(jié)點(diǎn)會啟動持久化進(jìn)程,把日志寫入文件系統(tǒng),當(dāng)前的HBase的數(shù)據(jù)節(jié)點(diǎn)進(jìn)入持久化狀態(tài);當(dāng)處于預(yù)備持久化狀態(tài)的HBase的數(shù)據(jù)節(jié)點(diǎn)在等待計(jì)時(shí)的過程中,如果有讀寫請求或者節(jié)點(diǎn)需要運(yùn)行其他任務(wù),則立即停止等待計(jì)時(shí),節(jié)點(diǎn)終止預(yù)備持久化狀態(tài)、重新進(jìn)入存儲狀態(tài);而處于持久化狀態(tài)的HBase的數(shù)據(jù)節(jié)點(diǎn)不會被中斷,直至完成了一個持久化過程,比如把日志文件或者某個HRegion的MemStore數(shù)據(jù)全部寫入了文件系統(tǒng),則重新轉(zhuǎn)入預(yù)備持久化狀態(tài)`。
【文檔編號】G06F17/30GK103870570SQ201410095611
【公開日】2014年6月18日 申請日期:2014年3月14日 優(yōu)先權(quán)日:2014年3月14日
【發(fā)明者】楊峰, 陳寧昕, 孫曉燕, 周學(xué)海, 唐長城, 謝飛, 趙偉, 李政 申請人:廣州攜智信息科技有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1