一種基于簡單再生碼的自適應編碼存儲容錯方法
【專利摘要】本發明公開一種基于簡單再生碼的自適應編碼存儲容錯方法,其包含以下四個主要步驟:1)存入HDFS中的文件,以三副本方式存儲;2)一個時間周期后,文件轉為簡單再生碼快速碼編碼;3)當文件訪問減少后,文件轉為簡單再生碼緊湊碼編碼;4)隨著運行中文件的動態屬性,可能發生步驟2)和步驟3)中文件編碼狀態相互轉化的情況。本發明通過在分布式文件系統HDFS中同時使用簡單再生碼緊湊碼和快速碼的兩種編碼形態,來達到存儲開銷和修復代價的折中,將基于簡單再生碼的自適應編碼方法引入到HDFS中,結合文件狀態和系統狀態,建立了自適應編碼機制,提高分布式存儲系統的整體存儲效率,降低修復代價。
【專利說明】
一種基于簡單再生碼的自適應編碼存儲容錯方法
技術領域
[0001]本發明涉及分布式存儲領域,特別涉及一種基于簡單再生碼的自適應編碼存儲容錯方法。
【背景技術】
[0002]由于使用糾刪碼可以在低存儲開銷的情況下達到高可靠性,大型的分布式存儲系統都開始轉向使用糾刪碼。但大多數線上運行的存儲系統只使用唯一一種糾刪碼,系統中實際使用的糾刪碼可能會從減少修復帶寬開銷或減少存儲開銷等方面進行優化。比如說,RS編碼是廣泛使用的一類糾刪碼,已經使用在了谷歌的ColossusFS、FaceBook的HDFS-Raid等許多存儲系統中。Co1ssusFS中使用的RS碼的存儲開銷為1.5x,在修復一個數據塊時需要6次磁盤讀和網絡傳輸。而在HDFS-Raid中使用的RS碼的存儲開銷為1.4x,但修復一個數據塊需讀取其他10個塊。另外常用的一類局部修復碼也是類似存儲開銷和修復代價的折中。
[0003]優化糾刪碼是為了解決系統運行時的故障修復問題。FaceBook的數據倉庫和其他HDFS生產系統中所有故障情況超過98%都是單個塊的故障,1.87%是兩個塊丟失,另外少于0.05%是三個塊或更多塊的錯誤。所以很多關于存儲系統中糾刪碼的研究都集中在降低單個塊失效時的修復開銷上。
[0004]同時,數據訪問不均衡是Hadoop工作流的一個普遍特性。分布式存儲系統中,大部分容量的數據都是冷數據,即只被訪問過很少的次數。同樣的,大部分訪問都集中在一小部分數據上,這部分數據被稱作熱數據。由于編碼理論本身的限制,低冗余和低修復代價是不能同時達到的。若僅對存儲效率進行優化,那么會增加修復時的開銷,這會導致對于熱數據的修復開銷增加。而大部分的數據訪問都集中在熱數據上,修復開銷增加勢必會影響整個系統的讀寫性能。同理,若僅對修復開銷優化,那么會使糾刪碼的存儲效率降低。由于大部分數據都是冷數據,不會經常被訪問,這些冷數據存儲效率的降低將會需要增加很多存儲空間,導致整個系統存儲開銷的迅速增加。無論哪一方面,在實際生產系統中都是不能接受的。
[0005]根據上面的觀察,對于熱數據來說,由于訪問比較頻繁,即使存儲開銷大一點,只要保證可用性即可,也就是修復開銷要小,修復要很快完成。所以熱數據比較適合在保證可靠性的情況下存儲效率不高但修復代價比較小的編碼方法。而對于冷數據來說,由于并不是很頻繁地被訪問,由數據不可用而導致退化讀的可能性較小。由于修復并不是很頻繁發生,即使修復開銷稍大一點,對于系統的整體性能影響并不大。而只要存儲效率高,對于龐大的數據量就可以節省很多存儲空間。所以在保證數據可靠性的前提下,冷數據比較適合存儲效率高,修復開銷較大的編碼方法。
【發明內容】
[0006]發明目的:為了克服現有技術中存在的不足,本發明提供一種提高分布式存儲系統整體存儲效率,并降低修復代價減少修復開銷的基于簡單再生碼的自適應編碼存儲容錯方法。
[0007]技術方案:為解決上述技術問題,本發明提供了一種基于簡單再生碼的自適應編碼存儲容錯方法,包括如下步驟:
[0008]步驟一:在分布式文件系統HDFS中設定數據文件的訪問頻度為A,系統整體的存儲開銷為B,第一個時間周期為Tl,第二個時間周期為T2;時間周期可根據實際情況而設定,可設為一天、一周或更長。訪問頻度的閾值A可根據時間周期的長短而設定,若時間周期為一天,則可設訪問頻度閾值為10。
[0009]步驟二:先將數據文件存入分布式文件系統HDFS,然后將數據文件以64MB為單位分為若干個數據塊,對每一個數據塊備份三份并存入不同的存儲節點中;
[0010]步驟三:第一個時間周期Tl后,HDFS中的自適應編碼模塊將數據文件由步驟二中的副本方式存儲轉化為編碼方式存儲,所述編碼方式為簡單再生碼快速碼方式存儲;
[0011 ]步驟四:第二個時間周期T2后,自適應編碼模塊檢測在該周期內該數據文件的訪問頻度和系統整體的存儲開銷;
[0012]步驟五:第二個時間周期T2內訪問頻度超過預設訪問頻度A的數據文件標記為熱數據,低于預設訪問頻度A的文件標記為冷數據,當數據文件為冷數據時,將該數據文件由簡單再生碼快速碼編碼轉化為簡單再生碼緊湊碼編碼,該過程成為升碼;當文件被較為頻繁訪問時,文件被簡單再生碼快速碼編碼,快速碼對于退化讀和對于單個存儲節點的修復開銷較小;當文件不被頻繁訪問時,文件被簡單再生碼緊湊碼編碼,緊湊碼對于退化讀和對于單個存儲節點的修復開銷較大,但訪問頻度低的文件不常發生退化讀情況。該機制加入了對于文件本身差異性的考慮,存儲系統中的絕大部分數據為冷數據,并不會頻繁被訪問,較少部分數據為熱數據,較為頻繁被訪問,這種劃分符合80-20法則,也符合計算機系統中的局部性原理。當文件在某一周期的訪問頻度與文件冷熱屬性不符時,則會觸發編碼形態間的轉化;當系統整體存儲開銷超過預設閾值時,會觸發快速碼編碼文件到緊湊碼編碼的轉化。
[0013]步驟六:當第二個時間周期T2內系統整體存儲開銷高于預設系統整體的存儲開銷B時,將HDFS中所有被簡單再生碼快速碼編碼的數據文件的訪問頻度進行排序,根據數據文件的訪問頻度從低到高依次將數據文件由簡單再生碼快速編碼轉化為簡單再生碼緊湊編碼,直到系統整體存儲開銷低于預設系統整體的存儲開銷B為止;
[0014]步驟七:當數據文件的訪問頻度高于預設訪問頻度A時,將由簡單再生碼緊湊碼編碼轉化為簡單再生碼快速碼編碼,該過程成為降碼。
[0015]本發明通過在分布式文件系統HDFS中同時使用簡單再生碼的兩種編碼形態,來達到存儲開銷和修復代價的折中,本發明將基于簡單再生碼的自適應編碼方法引入到HDFS中,結合文件狀態和系統狀態,建立了自適應編碼機制,提高分布式存儲系統的整體存儲效率,降低修復代價;本發明中的自適應編碼機制可以擴展到任何編碼方法,通用性和擴展性強,適用于任何使用編碼作為容錯策略的分布式文件系統HDFS。
[0016]簡單再生碼的兩種形態:一種形態為低修復開銷,對應為簡單再生碼快速碼,這種形態主要為了應付時常發生的退化讀和文件重構;另一種形態為低存儲開銷,對應為簡單再生碼緊湊碼,這種形態主要為了提高后端存儲時的存儲效率。簡單再生碼的兩種形態分別適用于冷、熱數據文件,當文件熱度或系統狀態發生改變時,文件對應的編碼形態也隨之改變,從而在系統運行時達到動態的平衡。
[0017]簡單再生碼兩種編碼形態相互轉化的方法:由快速碼轉化為緊湊碼的過程稱為升碼,升碼操作會將一個數據文件由快速碼編碼轉化為緊湊碼編碼,這樣可以減少校驗數據的大小,降低文件的存儲開銷,升碼操作并不需要讀取原數據文件,只需要對校驗數據進行轉化即可;由緊湊碼轉化為快速碼的過程稱為降碼,降碼操作將一個文件由緊湊編碼表示轉化為快速編碼表示,降碼需讀取原始文件和校驗數據,但只會改變校驗數據。
[0018]進一步的,所述步驟三中簡單再生碼快速碼是修復代價較小的簡單再生碼,從副本方式轉化為(n,k,f)簡單再生碼快速碼的具體步驟如下:
[0019]步驟1:將原數據文件切分成f組,并分別對這f組內每個子文件進行(n,k)RS編碼后獲得若干個編碼塊;
[0020]步驟2:將每組中的下標相同的編碼塊異或校驗,產生一組校驗塊;
[0021 ]步驟3:將步驟I中獲得的編碼塊和步驟2中獲得的校驗塊依次存放在η個存儲節點中。
[0022]進一步的,所述步驟五中升碼的具體步驟為:將兩組編碼塊聚合成一組,其中編碼塊中的數據塊和RS校驗碼塊不變,兩個校驗塊行所對應下標會進行異或運算并合并成一行。
[0023]進一步的,所述異或運算合并操作為從本地磁盤中讀出兩個校驗塊進行異或,再寫入磁盤中。
[0024]進一步的,所述步驟七中降碼的具體步驟為:將一組編碼拆分為兩組編碼,其中編碼塊中的每一行的數據塊和RS校驗塊不變,之后每產生一個校驗塊就需從相鄰f個節點讀取對應下標的塊,再異或產生對應下標的校驗塊,緊湊碼的全局校驗塊行與第一組快速碼的全局校驗塊行異或產生第二組快速碼的異或校驗塊行,兩個全局校驗塊直接在該存儲節點的內存中運算,最后將運算結果保存在該存儲節點上。
[0025]進一步的,所述系統存儲開銷閾值B介于簡單再生碼快速碼存儲開銷和緊湊碼存儲開銷之間,且接近簡單再生碼緊湊碼的存儲開銷。快速碼和緊湊碼的存儲開銷在設定編碼參數時既已確定,可由編碼參數計算而來。
[0026]本發明與現有技術相比,具有如下有益效果:
[0027]1、本發明通過在分布式文件系統HDFS中同時使用簡單再生碼的兩種編碼形態即快速碼和緊湊碼,來達到存儲開銷和修復代價的折中。當文件被較為頻繁訪問時,文件被簡單再生碼快速碼編碼,快速碼對于退化讀和對于單個存儲節點的修復開銷較小;當文件不被頻繁訪問時,文件被簡單再生碼緊湊碼編碼,緊湊碼對于退化讀和對于單個存儲節點的修復開銷較大,但訪問頻度低的文件不常發生退化讀情況。
[0028]2、本發明將基于簡單再生碼的自適應編碼方法引入到HDFS中,結合文件狀態和系統狀態,建立了自適應編碼機制,提高分布式存儲系統的整體存儲效率,降低修復代價。本發明中的自適應編碼機制可以擴展到任何編碼方法,通用性和擴展性強,適用于任何使用編碼作為容錯策略的分布式文件系統HDFS。
【附圖說明】
[0029]圖1為本發明的總體框架流程圖;
[0030]圖2為適用本發明的HDFS系統架構圖;
[0031 ]圖3為簡單再生碼快速碼構造示意圖;
[0032]圖4為簡單再生碼緊湊碼構造示意圖;
[0033]圖5為簡單再生碼升碼過程示意圖;
[0034]圖6為簡單再生碼降碼過程示意圖;
[0035]圖7為簡單再生碼快速碼修復單個塊示意圖;
[0036]圖8為簡單再生碼緊湊碼修復單個塊示意圖。
【具體實施方式】
[0037]下面結合附圖對本發明作更進一步的說明。
[0038]本發明基于HDFS(HadoopDistributed File System,Hadoop分布式文件系統)介紹基于簡單再生碼的自適應編碼存儲容錯方法。本發明包括如下步驟:
[0039]步驟一:在分布式文件系統HDFS中設定數據文件的訪問頻度為10,系統整體的存儲開銷為B,第一個時間周期為24h,第二個時間周期為24h;時間周期可根據實際情況而設定,可設為一天、一周或更長。訪問頻度的閾值A可根據時間周期的長短而設定,若時間周期為一天,則可設訪問頻度閾值為1。
[0040]步驟二:在文件寫入的最初階段,文件稍后被訪問的概率非常大,故首先將其以三副本方式存儲,先對文件以64MB為單位進行切塊,每一個數據塊保存三個副本,并根據HDFS的數據分發策略將這三個塊依次發送到不同的數據節點上,這樣做可以對較為頻繁的讀訪問進行負載均衡。
[0041]步驟三:在本實施例中設定時間周期為24h,當一個時間周期后,自適應編碼模塊會根據當前時間與文件創建時間的差值來判斷是否將文件從三副本方式轉化為簡單再生碼快速碼編碼方式,簡單再生碼快速碼的構造如圖3所示,圖中所示為SRC(n = 5,k = 3,f =2),(n,k,f)SRC編碼后的數據存放在η個存儲節點中,每個存儲節點將存放原始文件數據大小(f+l)/fk的數據,并且可以容忍n-k個數據節點發生故障。假設原文件為F,(n,k,f)SRC將原文件平均分為f個子文件Fi,F2,…,Ff,并且將這f個子文件分別進行(n,k)RS編碼生成η組編碼塊,然后將具有相同下標的編碼塊進行異或運算生成η個校驗塊,再以下標循環的方式依次將編碼塊和校驗塊存儲在η個節點之中。
[0042]步驟四:第二個時間周期24h后,自適應編碼模塊會記錄每個文件被訪問的次數,并存儲在文件的元數據中,同時也會記錄系統整體的存儲開銷;
[0043]步驟五:第二個時間周期T2內我們設定10為區分冷熱數據的閾值,若某文件為簡單再生碼快速碼編碼且在上一個時間周期內被訪問次數小于10,則標記該文件為冷數據,需將其由簡單再生碼快速碼編碼轉化為簡單再生碼緊湊碼編碼,該過程也稱為升碼。簡單再生碼緊湊碼的構造如圖4所示,前四行每一行有三個數據塊,兩個RS校驗塊,同一行中的RS校驗塊是由數據塊進行RS編碼產生的,第五行為下標相同的塊異或產生的校驗塊,雖然簡單再生碼是采用循環錯位放置方式,但還是數據塊與數據塊異或產生校驗塊,RS校驗塊與RS校驗塊異或產生全局校驗塊。簡單再生碼升碼過程如圖5所示,也是將兩組編碼塊聚合成一組,數據塊和RS校驗碼塊不變,兩個校驗塊行對應下標會進行異或運算合并成一行。由于圖示中每一列都存放在同一個存儲節點上,故這個合并操作不需要在網絡上傳輸數據,只需從本地磁盤中讀出兩個校驗塊進行異或,再寫入磁盤里即可。當文件被較為頻繁訪問時,文件被簡單再生碼快速碼編碼,快速碼對于退化讀和對于單個存儲節點的修復開銷較小;當文件不被頻繁訪問時,文件被簡單再生碼緊湊碼編碼,緊湊碼對于退化讀和對于單個存儲節點的修復開銷較大,但訪問頻度低的文件不常發生退化讀情況。
[0044]步驟六:當第二個時間周期T2內系統整體存儲開銷高于預設系統整體的存儲開銷B時,將HDFS中所有被簡單再生碼快速碼編碼的數據文件的訪問頻度進行排序,根據數據文件的訪問頻度從低到高依次將數據文件由簡單再生碼快速編碼轉化為簡單再生碼緊湊編碼,直到系統整體存儲開銷低于預設系統整體的存儲開銷B為止;
[0045]步驟七:若某文件的訪問頻度發生變化,即冷數據被頻繁訪問或熱數據不再頻繁被訪問,則會發生升碼和降碼過程,升碼過程如步驟五所述,文件由簡單再生碼緊湊碼編碼轉化為快速碼編碼的過程稱為降碼,由于快速碼編碼參數f = 2,每2行組合成新的快速碼,由下標相同的對應塊重新產生新的校驗塊。降碼過程如圖6所示,每一行的數據塊和RS校驗塊不會發生變化。每產生一個校驗塊就需從相鄰f個節點讀取對應下標的塊,故每一行的數據塊和校驗塊都需在網絡上傳輸,再異或產生對應下標的校驗塊。降碼比升碼實現過程復雜,所需要的網絡帶寬開銷也更大。在降碼的過程中,緊湊碼的全局校驗塊行可以與第一組快速碼的全局校驗塊行異或直接產生第二組快速碼的異或校驗塊行。由于同一列的塊都在同一個存儲節點上,因此兩個全局校驗塊直接在該存儲節點的內存中運算即可,并同時將運算結果保存在該存儲節點上。這一優化使第二組快速碼的數據塊和校驗塊都不需要在網絡上傳輸,節省了一部分網絡帶寬開銷。在系統運行過程中,被簡單再生碼快速碼編碼和緊湊碼編碼的文件都有可能發生退化讀情況,但被快速碼編碼的文件發生退化讀的概率要比被緊湊碼編碼的文件高很多。對于單個塊故障,快速碼的修復過程如圖7所示,從相鄰的f個節點上依次讀取下標相同的塊,進行異或運算即可恢復出原故障塊。緊湊碼對單個塊的修復過程如圖8所示。緊湊碼修復過程依然需連接f個節點,但需從這f個節點中讀取2f-l個下標相同的塊,加上從自身節點上讀取一個下標相同的塊,所以總共需要2f次磁盤I/O。然后對這2f個塊進行異或即可恢復出故障塊。對于某一個存儲節點發生故障的情況,快速碼依然可以通過同下標的異或運算依次恢復出該節點上的數據塊和校驗塊。但緊湊碼在同一節點上存放有兩個下標相同的數據塊,所以不能通過異或運算進行恢復,只能通過對應行的RS編碼解碼運算恢復出行丟失塊,再由下標相同的塊異或產生校驗塊。因此無論單個數據塊還是單個存儲節點的修復,緊湊碼的修復開銷都比快速碼大很多。對于SRC(5,3,2),快速碼的退化讀修復代價是2個塊,而緊湊碼是4個塊。
[0046]圖2是加入了自適應編碼機制的HDFS系統架構圖。自適應編碼模塊維持著編碼后數據的自身狀態和系統狀態,管理著數據由狀態變化而引起的狀態轉化。該模塊是在糾刪碼的接口上實現的,并且同時兼容多種編碼方式。名字節點中記錄著系統狀態,而文件自身的狀態是保存在元數據中的,HDFS系統中文件的元數據也保存在名字節點中。文件狀態保存被編碼后文件的大小、最后修改時間、訪問次數和編碼狀態。文件大小和最后修改時間也是HDFS會維持的屬性,自適應編碼模塊會使用這些屬性來計算出總的存儲開銷和文件的生命周期。自適應編碼模塊同時記錄一個文件被客戶端的訪問總次數。
[0047]本發明方法通過使用基于簡單再生碼的自適應編碼機制,加入了對存儲系統中文件本身的差異性的考慮,在HDFS中對存儲效率和修復代價進行了優化,使系統整體呈現較高的存儲效率和較小的修復代價,本發明方法設計簡單,通用性和擴展性強,對系統的整體性能產生了極大的提升。
[0048]以上所述僅是本發明的優選實施方式,應當指出:對于本技術領域的普通技術人員來說,在不脫離本發明原理的前提下,還可以做出若干改進和潤飾,這些改進和潤飾也應視為本發明的保護范圍。
【主權項】
1.一種基于簡單再生碼的自適應編碼存儲容錯方法,其特征在于,包括如下步驟: 步驟一:在分布式文件系統HDFS中設定數據文件的訪問頻度為A,系統整體的存儲開銷為B,第一個時間周期為Tl,第二個時間周期為T2; 步驟二:先將數據文件存入分布式文件系統HDFS,然后將數據文件以64MB為單位分為若干個數據塊,對每一個數據塊備份三份并存入不同的存儲節點中; 步驟三:第一個時間周期Tl后,HDFS中的自適應編碼模塊將數據文件由步驟二中的副本方式存儲轉化為編碼方式存儲,所述編碼方式為簡單再生碼快速碼方式存儲; 步驟四:第二個時間周期T2后,自適應編碼模塊檢測在該周期內該數據文件的訪問頻度和系統整體的存儲開銷; 步驟五:第二個時間周期T2內訪問頻度超過預設訪問頻度A的數據文件標記為熱數據,低于預設訪問頻度A的文件標記為冷數據,當數據文件為冷數據時,將該數據文件由簡單再生碼快速碼編碼轉化為簡單再生碼緊湊碼編碼,該過程成為升碼; 步驟六:當第二個時間周期T2內系統整體存儲開銷高于預設系統整體的存儲開銷B時,將HDFS中所有被簡單再生碼快速碼編碼的數據文件的訪問頻度進行排序,根據數據文件的訪問頻度從低到高依次將數據文件由簡單再生碼快速編碼轉化為簡單再生碼緊湊編碼,直到系統整體存儲開銷低于預設系統整體的存儲開銷B為止; 步驟七:當數據文件的訪問頻度高于預設訪問頻度A時,將由簡單再生碼緊湊碼編碼轉化為簡單再生碼快速碼編碼,該過程成為降碼。2.根據權利要求1所述的一種基于簡單再生碼的自適應編碼存儲容錯方法,其特征在于:所述步驟三中簡單再生碼快速碼是修復代價較小的簡單再生碼,從副本方式轉化為(n,k,f)簡單再生碼快速碼的具體步驟如下: 步驟1:將原數據文件切分成f組,并分別對這f組內每個子文件進行(n,k)RS編碼后獲得若干個編碼塊; 步驟2:將每組中的下標相同的編碼塊異或校驗,產生一組校驗塊; 步驟3:將步驟I中獲得的編碼塊和步驟2中獲得的校驗塊依次存放在η個存儲節點中。3.根據權利要求1或2所述的一種基于簡單再生碼的自適應編碼存儲容錯方法,其特征在于:所述步驟五中升碼的具體步驟為:將兩組編碼塊聚合成一組,其中編碼塊中的數據塊和RS校驗碼塊不變,兩個校驗塊行所對應下標會進行異或運算并合并成一行。4.根據權利要求3所述的一種基于簡單再生碼的自適應編碼存儲容錯方法,其特征在于:所述異或運算合并操作為從本地磁盤中讀出兩個校驗塊進行異或,再寫入磁盤中。5.根據權利要求1所述的一種基于簡單再生碼的自適應編碼存儲容錯方法,其特征在于:所述步驟七中降碼的具體步驟為:將一組編碼拆分為兩組編碼,其中編碼塊中的每一行的數據塊和RS校驗塊不變,之后每產生一個校驗塊就需從相鄰f個節點讀取對應下標的塊,再異或產生對應下標的校驗塊,緊湊碼的全局校驗塊行與第一組快速碼的全局校驗塊行異或產生第二組快速碼的異或校驗塊行,兩個全局校驗塊直接在該存儲節點的內存中運算,最后將運算結果保存在該存儲節點上。6.根據權利要求1所述的一種基于簡單再生碼的自適應編碼存儲容錯方法,其特征在于:所述系統存儲開銷閾值B介于簡單再生碼快速碼存儲開銷和緊湊碼存儲開銷之間,且接近簡單再生碼緊湊碼的存儲開銷。
【文檔編號】G06F17/30GK105956128SQ201610302217
【公開日】2016年9月21日
【申請日】2016年5月9日
【發明人】朱定亞, 葉保留, 陸桑璐
【申請人】南京大學