一種基于血統(tǒng)和檢測點(diǎn)技術(shù)的分布式內(nèi)存文件系統(tǒng)的制作方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及文件在運(yùn)算過程中的DAG圖,文件備份技術(shù),以及數(shù)據(jù)重算機(jī)制,并且具備資源的調(diào)度功能。
【背景技術(shù)】
[0002]盡管目前緩存技術(shù)提高了讀數(shù)據(jù)的速度,但是寫數(shù)據(jù)時依舊是通過網(wǎng)絡(luò)或硬盤,并且通過復(fù)制來保證數(shù)據(jù)的容錯。近些年來,已經(jīng)有很多努力來提高大規(guī)模并行數(shù)據(jù)處理系統(tǒng)的速度和復(fù)雜度。開發(fā)者和研究者已經(jīng)構(gòu)建了很多編程框架和存儲系統(tǒng)來處理各種各樣的作業(yè)。由于這些系統(tǒng)都是I/O相關(guān)的,傳統(tǒng)上一般引入緩存來提升性能,但傳統(tǒng)意義上在分布式計算系統(tǒng)中使用緩存雖然能極大提升讀數(shù)據(jù)的速度,對于寫數(shù)據(jù)的性能卻幫助不大,這是因為分布式系統(tǒng)需要提供容錯,而對于容錯數(shù)據(jù)一般采用在多個不同節(jié)點(diǎn)上保存副本來實現(xiàn)。在內(nèi)存中產(chǎn)生數(shù)據(jù)副本對于寫數(shù)據(jù)的性能有較大影響,并且節(jié)點(diǎn)之間副本的傳輸受限于網(wǎng)絡(luò)時延和吞吐量,相比直接使用本地內(nèi)存進(jìn)行緩存性能會差很多。
[0003]寫數(shù)據(jù)的性能嚴(yán)重影響了流水線式的作業(yè),這種任務(wù)的一個作業(yè)會用到另一個作業(yè)的輸出,這些作業(yè)一般用Oozie和Luigi框架進(jìn)行管理,例如,首先利用MapReduce來提取數(shù)據(jù),然后利用這些數(shù)據(jù)進(jìn)行數(shù)據(jù)庫查詢,再之后在數(shù)據(jù)庫查詢的結(jié)果上使用機(jī)器學(xué)習(xí)算法。另外,許多高級編程接口,比如Pig和Flumejava,把程序編譯成多個MapReduce作業(yè)然后順序執(zhí)行。這些案例,每一步之間都要通過網(wǎng)絡(luò)進(jìn)行數(shù)據(jù)備份。
[0004]硬件性能的提高并不能解決這些問題,在一個節(jié)點(diǎn)上,內(nèi)存的帶寬是硬盤的I到3個數(shù)量級,內(nèi)存和硬盤之間帶寬的差別越來越大。固態(tài)硬盤的出現(xiàn)也不會對這個問題帶來影響,因為固態(tài)硬盤的主要優(yōu)勢是減少隨機(jī)訪問的延遲,不能增加順序I/O的帶寬,而這是數(shù)據(jù)密集型任務(wù)要求的。此外,網(wǎng)絡(luò)吞吐量的增加表明通過網(wǎng)絡(luò)進(jìn)行內(nèi)存數(shù)據(jù)復(fù)制是可行的。但是,為了使得數(shù)據(jù)中心在斷電的情況下具備容錯的能力,就需要至少一份數(shù)據(jù)進(jìn)行硬盤備份。因此,為了提高系統(tǒng)的吞吐量,存儲系統(tǒng)必須不通過數(shù)據(jù)備份就能夠具備容錯的能力。
[0005]為了提高寫數(shù)據(jù)的性能,我們提出了基于血統(tǒng)和檢測點(diǎn)技術(shù)分布式內(nèi)存文件系統(tǒng),能夠在保證容錯性的情況下提高數(shù)據(jù)的讀寫吞吐量。該系統(tǒng)利用血統(tǒng)的概念來規(guī)避由于復(fù)制數(shù)據(jù)造成的吞吐量降低的問題,即在任務(wù)失敗是通過重新計算恢復(fù)數(shù)據(jù),也就是說,血統(tǒng)不需要數(shù)據(jù)的備份來提供容錯。
【發(fā)明內(nèi)容】
[0006]本發(fā)明目的在于,提出一個分布式內(nèi)存文件系統(tǒng),在保證分布式應(yīng)用程序數(shù)據(jù)容錯性的情況下,提升數(shù)據(jù)讀寫的吞吐量。
[0007]本發(fā)明包含兩層架構(gòu):血統(tǒng)層和持久層。血統(tǒng)層主要提供較高的I/O吞吐量,并且能夠跟蹤創(chuàng)建特定數(shù)據(jù)輸出的作業(yè)序列。持久層則將數(shù)據(jù)持久化到存儲介質(zhì)中,主要用到異步備份技術(shù)。持久層可以是任何現(xiàn)存的基于存儲系統(tǒng)的數(shù)據(jù)備份系統(tǒng),比如HDFS,S3和Glusterfs0
[0008]為了能夠管理元素?fù)?jù),主節(jié)點(diǎn)也包含工作流的管理模塊。這個管理模塊是為了能夠跟蹤血統(tǒng)的信息、計算檢測點(diǎn)的序列和管理集群資源為重新計算分配資源。
[0009]每一個工作節(jié)點(diǎn)都運(yùn)行一個守護(hù)進(jìn)程來管理本地資源并且定期向主節(jié)點(diǎn)報告狀態(tài)信息。另外,每一個工作節(jié)點(diǎn)使用虛擬硬盤來存儲內(nèi)存映射文件。一個用戶應(yīng)用程序能夠訪問守護(hù)進(jìn)程和直接與虛擬硬盤進(jìn)行交互。這樣,使用本地數(shù)據(jù)的用戶程序就可以以內(nèi)存訪問的速度進(jìn)行數(shù)據(jù)處理,避免了額外的數(shù)據(jù)拷貝。
[0010]就存儲而言,任務(wù)的二進(jìn)制文件是血統(tǒng)信息最大的組成部分。但是,根據(jù)微軟的數(shù)據(jù)顯示,一個典型的數(shù)據(jù)中心平均每天運(yùn)行1000個任務(wù),每年用于存儲未經(jīng)壓縮的作業(yè)二進(jìn)制文件高達(dá)ITB。
[0011 ]同時,該系統(tǒng)可以回收血統(tǒng)信息。特別是在設(shè)置輸出數(shù)據(jù)的檢測點(diǎn)后,該系統(tǒng)會刪除血統(tǒng)記錄,這將會大大減少血統(tǒng)信息的數(shù)量。另外,在生產(chǎn)環(huán)境中,同一個二進(jìn)制文件會執(zhí)行很多次,例如,只需要不同參數(shù)的周期性作業(yè)。在這種情況下,只需要一個數(shù)據(jù)備份就可以了。
[0012]該系統(tǒng)使用LRU作為默認(rèn)的內(nèi)存替換策略。但是,由于LRU可能不是在所有的情形下都能夠有很好的表現(xiàn),本文件系統(tǒng)允許用戶使用其他的回收策略。最后,除了一些最大的文件,存儲所有文件在內(nèi)存。其他的數(shù)據(jù)直接存儲在持久層。
[0013]用被動后備式的方法來保證主節(jié)點(diǎn)的容錯性,主節(jié)點(diǎn)把每一步的操作都以日志的形式同步到持久層,當(dāng)主節(jié)點(diǎn)失敗時,一個新的主節(jié)點(diǎn)將從備用節(jié)點(diǎn)選出新的主節(jié)點(diǎn),新的主節(jié)點(diǎn)依靠讀取日志來恢復(fù)原來節(jié)點(diǎn)的狀態(tài)。注意,由于元數(shù)據(jù)相對與輸出數(shù)據(jù)的大小來說是非常小的,所以這些存儲和復(fù)制是微不足道的。
【附圖說明】
[0014]圖1本發(fā)明的架構(gòu)示意圖圖2氣球驅(qū)動過程圖
圖3物理頁到機(jī)器頁的映射示意圖圖4收集、平衡過程圖
【具體實施方式】
[0015]如圖1所示,是本發(fā)明實例所提供的技術(shù)框架,整個框架采用類似Hadoop的Master-Slave結(jié)構(gòu),該系統(tǒng)架構(gòu)在最底層的分布式文件存儲和上層的各種計算框架之間的一種中間件。主要職責(zé)是將那些不需要落地到DFS里的文件,落地到分布式內(nèi)存文件系統(tǒng)中,來達(dá)到共享內(nèi)存,從而提高效率。同時可以減少內(nèi)存冗余,GC時間等。該系統(tǒng)利用被動后備式的方法來保證主節(jié)點(diǎn)的容錯性,主節(jié)點(diǎn)把每一步的操作都以日志的形式同步到持久層,當(dāng)主節(jié)點(diǎn)失敗時,一個新的主節(jié)點(diǎn)將從備用節(jié)點(diǎn)選出新的主節(jié)點(diǎn),這里使用到了 paxos算法來進(jìn)行主節(jié)點(diǎn)的選取,新的主節(jié)點(diǎn)依靠讀取日志來恢復(fù)原來節(jié)點(diǎn)的狀態(tài)。每一個工作節(jié)點(diǎn)都運(yùn)行一個守護(hù)進(jìn)程來管理本地資源并且定期向主節(jié)點(diǎn)報告狀態(tài)信息。另外,每一個工作節(jié)點(diǎn)使用虛擬硬盤來存儲內(nèi)存映射文件。一個用戶應(yīng)用程序能夠訪問守護(hù)進(jìn)程和直接和虛擬硬盤進(jìn)行交互。
[0016]血統(tǒng)的具體實施過程如圖2所示,本文件系統(tǒng)主要基于這樣的血統(tǒng)圖來實現(xiàn)容錯,整個血統(tǒng)信息以二進(jìn)制可執(zhí)行代碼的形式存儲了文件經(jīng)過相應(yīng)的操作產(chǎn)生的新文件的邏輯結(jié)構(gòu)圖,這個結(jié)構(gòu)圖可以使用DAG圖來表示,這相對與要存儲所有的文件的內(nèi)容來說,大大降低了要存儲的文件的數(shù)量,以此來提高保證數(shù)據(jù)容錯性的性能。
[0017]本文件系統(tǒng)是一個類似HDFS的文件系統(tǒng),支持?jǐn)?shù)據(jù)的追加和一些標(biāo)準(zhǔn)文件操作(創(chuàng)建、打開、讀取、寫入、關(guān)閉和刪除),另外,還提供處理不同的