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