一種基于hdfs的小文件優化存儲方法
【專利摘要】本發明公開一種基于HDFS的小文件優化存儲方法,提高HDFS對小文件的讀取效率,提升系統的整體性能。包括以下步驟:1)小文件合并與存儲預處理,通過對文件過濾、小文件合并、元數據的生成、對象ID的生成實現小文件存儲預處理。2)文件以合并的方式存儲到HDFS中后,小文件與HDFS中合并文件的映射關系以文件元數據的形式存儲到小文件元數據中,文件的目錄結構存儲在文件名中。元數據采用基于Chord協議的分布式集群存儲。3)文件目錄結構優化,將元數據鍵值key的生成分解為DirectoryID和SmallFileID。DirectoryID作為元數據跳轉到元數據集群中結點的key值,實現了同一目錄下文件存儲到同一結點。SmallFileID在元數據結點中生成,實現每一個元數據對應一個全局唯一的ID標識。
【專利說明】一種基于HDFS的小文件優化存儲方法
【技術領域】
[0001]本發明涉及一種基于HDFS的小文件優化存儲方法,具體是一種對分布式、海量小文件數據實現優化存儲的方法,屬于分布式數據優化存儲領域。
【背景技術】
[0002]隨著互聯網技術的飛速發展,數據量呈指數級增長,現在這樣一個信息爆炸的互聯網時代,給互聯網用戶的生活帶來了深遠的影響。但是,對于互聯網應用領域而言,如何去解決這些海量數據的存儲是一個巨大挑戰。在這些挑戰下,傳統的數據存儲與處理技術,如關系型數據庫,已經不能滿足技術發展的需求,新興的海量數據存儲技術不斷涌現。如Google公司使用的并行文件系統GFS ;海量數據MapReduce編程模型;亞馬遜的SimpleStorage Service (S3) ;Yahoo, Facebook 等公司支持的開源軟件 Hadoop 等。
[0003]Hadoop是近幾年發展較快的云計算平臺之一,憑借其可靠、高效、可伸縮的特性在大規模計算領域得到了廣泛應用。HDFS作為Hadoop的分布式文件系統,成為在集群上主流的海量存儲件系統。HDFS由一個NameNode和若干個DataNode組成,其中NameNode負責管理文件系統的命名空間,DataNode是文件系統的工作節點。HDFS采用主從式架構模式,簡化了分布式文件系統結構。HDFS對海量大文件的處理,能夠提供高效的處理效率。但是,Hadoop在處理海量小文件時,就會出現以下問題:
[0004](I)NameNode把文件系統的元數據放置在內存中。雖然小文件的大小遠小于HDFS默認的文件大小64MB,其占用的存儲空間不多,但是小文件在NameNode中占用的內存大小與普通大文件相同。所以,當存儲海量小文件時,元數據在NameNode中所占用的內存大量增加,從而導致HDFS對海量小文件存儲性能較差。
[0005](2)海量小文件訪問效率低。在HDFS中,所有文件的元數據都存儲在單一的NameNode內存中,一旦文件數量達到一定的規模后,內存中元數據過多。由于在NanmeNode內存中,元數據查找采用遍歷檢索方式,這樣導致海量小文件檢索訪問效率明顯下降。
[0006](3)在HDFS中,采用單個獨立的NameNode,靜態劃分的方法,對元數據進行管理與分布。這不僅存在單點失效的問題,同時對于大量小文件訪問請求的情況下,系統性能難以保證。需要使用一組名字節點進行分布式處理才能滿足需求。
[0007]然而在實際應用中,從科學計算研究,到Web應用中都會產生大量的小文件。據National Energy Research Scientific Computing Center統計,在其擁有的 13,000,000個文件中,約有99%的文件時小于64MB,其中43%的文件是小于64KB。2007年在太平洋西北國家實驗室對其存儲數據進行統計,發現其系統中存儲的12,000, 000個文件中,94%的文件小于64MBtyes,58%的文件小于64KBtyes。淘寶圖片存儲系統容量1800TB (1.8PB),已經占用空間990TB (約1PB),保存的圖片文件數量達到286億多個,這些圖片文件包括根據原圖生成的縮略圖,平均圖片大小是17.45K,其中8K以下占圖片總量的61%,占存儲容量的11%。在分布式文件系統中,海量小文件的出現,對系統I/O挑戰從提供高并發的I/O吞吐量轉向提供高并發的元數據存取效率。[0008]在HDFS分布式文件系統中,如何對海量小文件數據進行有效地存儲與訪問,提高存儲和訪問的效率是急需解決的問題,也是z?存儲面臨的重要問題。
【發明內容】
[0009]發明目的:針對HDFS分布式文件系統對海量小文件數據存儲資源利用低,文件訪問效率低的問題,本發明提供了一種基于HDFS的小文件優化存儲方法,提高HDFS對小文件的讀取效率,提升系統的整體性能。
[0010]技術方案:一種基于HDFS的小文件優化存儲方法,包括以下三個方面:
[0011](I)小文件合并與存儲預處理
[0012](2)元數據分布式存儲
[0013](3)文件目錄結構優化
[0014](I)小文件合并與存儲預處理采用的如下:
[0015]小文件合并與存儲預處理主要分為四個流程,分別是文件過濾、文件合并、元數據生成、元數據對象ID生成。文件過濾和文件合并在客戶端完成;元數據生成和元數據對象ID的生成在名字節點NameNode端完成。
[0016]①文件過濾:文件過濾是用來判斷客戶端傳送的文件是否為小文件。本發明中設定IM為判斷小文件的閾值,若文件大小小于1M,則判斷此為小文件,并對小文件進行后續的合并等操作;否則若為大文件,則文件直接存在至HDFS的數據節點DataNode中。
[0017]②文件合并:由于HDFS屬于日志文件類型,文件的添加方式屬于尾部添加。文件合并將通過過濾的小文件以尾部添加的方式合并,生成合并文件。若新添加的小文件超過合并文件的剩余空間,則需要申請新的`文件塊。由于,HDFS中默認的磁盤塊為64MB,本發明設定合并文件大小為64MB。在文件合并過程中,小文件向系統輸入小文件名SF_Name、文件長度SF_length、小文件標識位SF_Flag等信息。小文件經過合并后,向系統輸出合并后的文件名MF_Name、小文件在合并文件中的偏移量SF_ofTSet、合并文件長度MF_length、合并文件標識位等信息MF_Flag。通過小文件合并前后輸入與輸出信息,系統可以實現小文件與合并文件之間的映射。
[0018]③小文件元數據生成:小文件元數據包括小文件屬性以及小文件到合并文件的映射關系。為了減輕名字節點NameNode的存儲負載,優化HDFS對小文件的讀寫速度,在一個磁盤塊中保存多個小文件,文件合并后將對此磁盤塊操作的控制權轉移到元數據集群。小文件的元數據以〈key, value)鍵值對的形式存儲在元數據集群。
[0019]根據小文件名SF_Name與其所在目錄生成一個唯一的小文件標識符SF_ID,并將SF_ID作為小文件的元數據〈key, value〉的key值。
[0020]再根據小文件名SF_Name、合并文件名MF_Name、小文件在合并文件中的偏移量SF_offset、合并文件長度MF_length、合并文件標識位MF_Flag等信息封裝為小文件的元數據〈key, value〉的 value 值。
[0021]④生成元數據對象ID:元數據以〈key, value)鍵值對的形式存儲,將key值采用SHA-1算法,計算得到hash值,再根據Hash值匹配到對應的存儲節點,并將元數據〈key, value〉存儲到此節點。
[0022]( 2)元數據分布式存儲[0023]在HDFS中,采用主從式結構存儲元數據,當數據增大時,內存空間的限制會成為小文件的瓶頸。命名空間層級采用B樹的組織形式,其運算復雜度為O (logn)。為了提高海量小文件檢索訪問性能,將小文件以合并的方式存儲到HDFS中后,小文件與HDFS中合并文件的映射關系以文件元數據的形式存儲到小文件元數據中,文件的目錄結構存儲在文件名中。元數據采用基于Chord協議的分布式集群存儲,可以實現將小文件的元數據以Key-Value對的形式存儲,使其運算復雜度降至O (I)。當數據量增大時,可通過添加結點來緩解壓力。
[0024]元數據的基本操作包括鍵值對生成,內容查找與對象ID定位,及更新集群結點。
[0025]①鍵值對生成:散列表的建立與散列值的產生都需要使用分布式哈希表(DHT),小文件存儲到HDFS中后,NameNode生成了一個小文件的元數據。小文件的文件名命名采用文件全路徑,包括文件的名稱和文件所在的目錄。使用SHA-l(Secure Hash Algorithm)安全散列算法,生成了一個鍵值key。[0026]②內容查找與對象ID定位:定位對象ID所在的結點需要使用到關鍵值key與集群結點ID。基于DHT的系統采用一個128位標識符空間,將隨機選擇的標識符賦給結點,含有鍵值key的鍵值對〈key,value)位于含有大于鍵值最小標識符的結點之內,該結點被稱為鍵值的后繼者,用succ (k)表示。相比基礎的DHT系統,Chord算法不是線性的進行鍵值查找,而是維護一個最多有m個實體的指狀表(Finger Table)。假設使用F表示結點p的指狀表,則有Ρρ[?]=8ικ^(ρ+2Η),換句話說,第i個結點指向此結點后2H的第一個結點。一個查找需要O (1gN)步,其中N為系統中的結點數。
[0027]③更新集群結點:在元數據分布式存儲集群中,參與的結點集合可能總是在變化。假如結點P要加入Chord系統,只需與已有的系統中的任意結點聯系,并請求查找succ (ρ+l) 0 一旦標示了該結點,結點p就可以把自己插入到該環(Chord系統)中。
[0028]集群有結點加入或者結點離開時,每一個結點都需要有指狀表的更新,每個結點P,當實體指向環中的下一個結點時,Fp[l]是正確的,即后繼者是ρ+l。每個結點P定期地運行一個進程來與succ (ρ+l)聯系,并請求返回pred(succ (ρ+l))。如果p=pred(succ (p+1)),那么P就知道它的信息與其后繼者的是一致的。否則,如果P的后繼者更新了它的前繼者,那么顯然有一個新的結點q加入該系統,而且有P < qSUCC (ρ+l),這樣p就需要將其Fp[l]調整為指向q。此時,檢查q是否將P記作其前繼者。如果沒有,就需要再次調整Fp[l]。
[0029]( 3 )文件目錄結構優化
[0030]原有的Hadoop集群通過多叉樹的方式,實現了名稱空間的結構化。將小文件元數據存儲到元數據集群中后,小文件元數據以Key-Value對的方式存儲到Chord集群的各個結點中,在這種分布式的情況下,無法實現文件目錄的操作。同時,由于不同的文件名計算出的Hash值也有很大差異,所以很難保證同一個目錄中的小文件的元數據存儲在同一個結點中。本發明提出文件目錄結構優化,即將文件目錄層次結構寫到對象塊的ID中(即目錄ID),反映對象之間的命名空間關系,實現元數據索引本地化,同時將HDFS作為基礎的文件存儲管理系統,抽象出文件的目錄結構,方便小文件讀取。
[0031 ] 本發明中提到的元數據包括目錄元數據和文件元數據。目錄元數據包含路徑命名空間和目錄屬性;小文件元數據包括小文件屬性以及小文件到數據塊的映射關系。目錄結構優化是將元數據鍵值key的生成分解為DirectoryID和SmallFilelD。DirectoryID在NameNode端生成,作為元數據跳轉到元數據集群中結點的key值,實現了同一目錄下文件存儲到同一結點。SmallFilelD在元數據結點中生成,實現每一個元數據對應一個全局唯一的ID標識。
[0032]根據多叉樹深度遍歷的方式,本發明提出了基于深度的分配算法:給每一個目錄層次分配一個空間段,空間段由一個或者多個位組成,分配順序位從左向右。采用多叉樹深度遍歷方式,可以實現小文件快速定位與訪問。
[0033]目錄結構優化后,讀取元數據分為三個部分:
[0034]①文件目錄解析:將文件路徑以字符串數組的方式存儲,計算并初始化目錄的層數,然后使用基于深度分配算法實現將文件目錄轉換為DirectorylD。
[0035]②文件名解析:解析得到DirectoryID后,根據Chord協議,跳轉到相應結點,對文件名進行解析,將解析結果與DirectoryID相加后,得到SmallFilelD。
[0036]③查找對應的元數據:元數據存儲在以SmallFilelD為key值,元數據為value值的〈key, value)鍵值對數組中。采用折半查找法,快速查找小文件元數據。
[0037]有益效果:與現有技術相比,本發明提供的基于HDFS的小文件優化存儲方法,通過對文件過濾、小文件合并、元數據的生成、對象ID的生成實現小文件存儲預處理、元數據分布式存儲以及文件目錄結構優化,提高HDFS對小文件的讀取效率,提升系統的整體性倉泛。
【專利附圖】
【附圖說明】
[0038]圖1為本發明實施例的基于HDFS小文件優化存儲方法的總體框架圖;
[0039]圖2為本發明實施例中小文件合并前輸入的信息結構圖;
[0040]圖3為本發明實施例中小文件合并后輸出的信息結構圖;
[0041]圖4為本發明實施例中小文件元數據結構圖;
[0042]圖5為本發明實施例中元數據對象ID的數據結構圖;
[0043]圖6為本發明實施例中基于HDFS的目錄優化結構圖;
[0044]圖7為本發明實施例中小文件存儲過程;
[0045]圖8為本發明實施例中小文件讀取過程;
[0046]圖9為本發明實施例中小文件刪除過程。
【具體實施方式】
[0047]下面結合具體實施例,進一步闡明本發明,應理解這些實施例僅用于說明本發明而不用于限制本發明的范圍,在閱讀了本發明之后,本領域技術人員對本發明的各種等價形式的修改均落于本申請所附權利要求所限定的范圍。
[0048]圖1為本發明提供的基于HDFS小文件優化存儲方法的總體框架圖,其工作過程如下所描述:
[0049]①當客戶端需要向DataNode節點存儲小文件時,首先,文件過濾模塊對文件進行過濾,判斷客戶端傳送的文件是否為小文件。若文件大小小于1M,則判斷此為小文件,并對小文件進行后續的合并等操作;否則若為大文件,則文件直接存在至HDFS的數據節點DataNode 中。
[0050]②文件合并模塊,對過濾后的小文件以尾部添加的方式合并,生成合并文件。若新添加的小文件超過合并文件的剩余空間,則需要申請新的文件塊。在文件合并過程中,小文件向系統輸入小文件名SF_Name、文件長度SF_length、小文件標識位SF_Flag等信息,見附圖2所示。小文件經過合并后,向系統輸出合并后的文件名MF_Name、小文件在合并文件中的偏移量SF_ofTSet、合并文件長度MF_length、合并文件標識位等信息MF_Flag,見附圖3所示。通過小文件合并前后輸入與輸出信息,系統可以實現小文件與合并文件之間的映射。
[0051]③元數據生成模塊負責生成小文件元數據,反映小文件到合并后文件的映射關系。為了減輕名字節點NameNode的存儲負載,優化HDFS對小文件的讀寫速度,小文件的元數據以〈key, value)鍵值對的形式存儲在元數據集群。
[0052]其中,小文件名SF_Name與其所在目錄生成一個唯一的小文件標識符SF_ID,并將SF_ID作為小文件的元數據〈key, value)的key值。另一方面,根據小文件名SF_Name、合并文件名MF_Name、小文件在合并文件中的偏移量SF_ofTSet、合并文件長度MF_length、合并文件標識位等信息MF_Flag信息封裝為小文件的元數據〈key, value)的value值,見附圖4所示。
[0053]④元數據對象ID生成模塊負責根據小文件元數據以〈key, value〉鍵值對生成元數據對象ID。將key值采用SHA-1算法,計算得到Hash值,再根據Hash值匹配到對應的存儲節點,并將元數據〈key, value)存儲到此節點。元數據對象ID的數據結構見附圖5所
/Jn ο
[0054]附圖5是以一個基于64位對象ID空間為例,元數據對象ID的標識位及其作用。其中前4位為特殊區域,其余60位表示小文件定位區域。
[0055]標志位OxO:普通段用來沒有溢出的文件或者文件夾的命名空間扁平化。比如,每個目錄段分配3位,8位用來存放目錄中的文件,通過計算,得出文件擁有18個目錄層次,每層擁有255個文件。
[0056]標志位Oxl:用來標識目錄層次過多。當文件深入到第19層時,便會出現越位,此時,使用之前的保留的標志位0x1。還是使用原有的分配方法,只是將舊的文件目錄中最里面的9層目錄保留,剩下9層記錄新的目錄層次。這樣的好處是能記錄更多更深入的層次。
[0057]標志位0x2,用來標識一個目錄中文件數量過多。如果文件數量過多,文件夾中的文件超過255個時。也會出現越位的情況。解決的方案也和解決目錄過深的方案類似。首先標記保留位為0x2,然后保留其最里面的9層目錄,這樣的話,可以多余出27位留給文件。這樣一個文件夾可以保留的文件數量為三千多萬的文件數量。按照小文件元數據的存儲,一個如果保留這么多文件所需要的內存約為6G。
[0058]標志位0x3,用來標識目錄和文件數量均超過可標識的范圍。在最后一個標志位的對象ID采用先到先分配的算法。
[0059]⑤為了海量小文件檢索訪問性能,將小文件以合并的方式存儲到HDFS中后,小文件與HDFS中合并文件的映射關系以文件元數據的形式存儲到小文件元數據中,文件的目錄結構存儲在文件名中。元數據采用基于Chord協議的分布式集群存儲,可以實現將小文件的元數據以〈Key-Value〉對的形式存儲。當數據量增大時,可通過添加結點來緩解壓力。附圖6是基于HDFS的目錄優化結構圖。[0060]在Hadoop集群之上引入樹形目錄結構。目錄層的索引存儲在NameNode中,小文件元數據存儲在相應的元數據集群結點上。目錄結構優化將元數據Key值的生成分解為DirectoryID和SmallFilelD兩個部分。DirectoryID在NameNode端生成,作為兀數據跳轉到元數據集群中結點的Key值,實現了同一目錄下的文件存儲到同一結點中。SmallFilelD在元數據結點中生成,實現了每一個元數據對應一個全局唯一的ID標示。
[0061]⑥當用戶在客戶端讀取小文件時,與傳統客戶端請求時只返回一個元數據對象相t匕,采用元數據集群,可以返回更多相關對象的元數據,并對相關對象的元數據統一編排。為了提高小文件訪問性能,本發明中客戶端采用始終預讀取技術,即每次I/o操作時,無論是否命中cache資源,都執讀取客戶請求的小文件之后的10個數據。
[0062]圖7為本發明方法中小文件存儲流程圖,其過程如下:
[0063]小文件存儲系統包括小文件存儲預處理、元數據分布存儲、及文件目錄結構優化等步驟。從附圖7可以看出,首先是準備將文件存入HDFS的Data Block中@,然后經過
文件過濾模塊將文件大于閾值(設定為1M)的文件過濾出來@,若大于閾值的文件認定
為非小文件,直接存入HDFS的DataNode分配的Block中@.否則將小于閾值的文件直接
傳遞到文件合并模塊。申請合并文件塊Θ,判斷申請到的合并文件是否有足夠的空間能
存放當前的小文件,若足夠大,則以尾部添加的方式追加到合并文件中@,然后將小文件
與合并文件之間的映射信息賦值到合并文件中Θ ;否則重新申請合并文件塊@,生成新的數據塊并添加小文件。
[0064]以上步驟都是在客戶 端完成。以下步驟將由NameNode端處理完成小文件元數據
的生成和小文件數據存儲到Chord中。接著,?將小文件對應的數據塊ID、文件在塊中的
偏移量、小文件長度、以及相關的其他屬性封裝為元數據,并作為Value值(元數據的格式及內容見圖4),并且根據文件目錄生成一個唯一的ID標識一SmallFilelD ;使用基于深度的路徑命名算法對小文件的目錄進行分析計算,得到對應的目錄ID-DirectoryID,并作
為Key值。于是,使用SHA-1計算出Key的散列值@,將此散列值信息送到分布式散列表
中的任意參與結點,此信息根據Chord算法在網絡中與各個節點的Hash值進行比較,并將
這個〈key, value)鍵值對存儲在相應的結點上
O
[0065]圖8為本發明方法中小文件讀取過程流程圖,其過程如下:
[0066]客戶端發送讀取請求,調用小文件讀取模塊?。首先,判斷Hadoop集群中是否
存在該文件,若存在,則直接鏈接到指定的DataNode 0 ?并返回請求的文件;若在集群中沒有查找到文件Θ,則計算元數據的目錄ID。然后,將目錄ID的HASH散列值在Chord元數據集群中查找
【權利要求】
1.一種基于HDFS的小文件優化存儲方法,用于海量小文件數據的存儲管理,其特征在于,包括三個方面:小文件合并與存儲預處理,元數據分布式存儲,以及文件目錄結構優化; O小文件合并與存儲預處理:通過對文件過濾、小文件合并、元數據的生成、對象ID的生成實現小文件存儲預處理;文件過濾和文件合并在客戶端完成;元數據生成和元數據對象ID的生成在名字節點NameNode端完成;文件過濾是用來判斷客戶端傳送的文件是否為小文件;文件合并將通過過濾的小文件以尾部添加的方式合并,生成合并文件;若新添加的小文件超過合并文件的剩余空間,則需要申請新的文件塊;通過小文件合并前后輸入與輸出信息,系統可以實現小文件與合并文件之間的映射,映射關系以小文件元數據〈key,value)鍵值對的形式存儲在元數據集群,同時生成元數據對象ID,即目錄ID,包括路徑命名空間和目錄屬性,并作為目錄元數據; 2)元數據分布式存儲:小文件元數據〈key,value)鍵值對采用基于Chord協議的分布式集群存儲;通過目錄ID指向Chord中的相應結點,使得相關聯的小文件的元數據存放于同一目錄下; 3)文件目錄結構優化:將文件目錄層次結構寫到對象塊的ID中,即目錄ID中,使其能夠反映對象之間的命名空間關系,實現元數據索引本地化;目錄結構優化是將元數據鍵值key的生成分解為DirectoryID和SmallFilelD。DirectoryID作為元數據跳轉到元數據集群中結點的key值,實現了同一目錄下文件存儲到同一結點;SmallFileID在元數據結點中生成,實現每一個元數據對應一個全局唯一的ID標識;根據多叉樹深度遍歷方式,采用基于深度的目錄層次空間分配算法,實現小文件快速定位與訪問。
2.根據權利要求1所述的基于HDFS的小文件優化存儲方法,其特征在于,所述步驟I)進一步包含以下步 驟: ,1.1)判斷客戶端傳送的文 件是否為小文件;設定小文件的閾值為1M,若文件大小小于1M,則為小文件,并轉為1.2);否則若為大文件,則文件直接存在至HDFS的數據節點DataNode 中; ,1.2)通過過濾的小文件以尾部添加的方式合并,生成合并文件;若新添加的小文件超過合并文件的剩余空間,則需要申請新的文件塊,其中設定合并文件大小為64MB ; , 1.3)在文件合并過程中,小文件向系統輸入小文件名SF_Name、文件長度SF_length和小文件標識位SF_Flag信息; ,1.4)小文件經過合并后,向系統輸出合并后的文件名MF_Name、小文件在合并文件中的偏移量SF_0fTSet、合并文件長度MF_length和合并文件標識位MF_Flag信息; ,1.5)根據小文件名SF_Name與其所在目錄生成一個唯一的小文件標識符SF_ID,并將SF_ID作為小文件的元數據〈key, value〉的key值; ,1.6)根據小文件名SF_Name、合并文件名MF_Name、小文件在合并文件中的偏移量SF_offset、合并文件長度MF_length和合并文件標識位MF_Flag信息封裝為小文件的元數據〈key, value)的value值;實現小文件與合并文件之間的映射; , 1.7)生成元數據對象ID,即目錄ID ;小文件的文件名命名采用文件全路徑,包括文件的名稱和文件所在的目錄;使用SHA-1安全散列算法,生成了一個鍵值key,并將元數據以〈key, value〉存儲到此節點,生成目錄ID。
3.根據權利要求2所述的基于HDFS的小文件優化存儲方法,其特征在于,所述步驟2)進一步包含以下步驟: . 2.1)小文件的元數據以〈Key-Value〉鍵值對形式,基于Chord協議的分布式集群進行存儲;文件的目錄結構存儲在文件名中; . 2.2)定位對象ID所在的結點需要使用到關鍵值key與集群結點ID ;基于DHT的系統采用一個128位標識符空間,將隨機選擇的標識符賦給結點,含有鍵值key的鍵值對〈key,value〉位于含有大于鍵值最小標識符的結點之內,該結點被稱為鍵值的后繼者,用succ (k)表示;Chord協議通過維護一個最多有m個實體的指狀表。假設使用F表示結點p的指狀表,則有Fp [i] =SUcc (P+2H),換句話說,第i個結點指向此結點后21-l的第一個結點;一個查找需要O (1gN)步,其中N為系統中的結點數;. 2.3)集群有結點加入或者結點離開時,每一個結點都需要有指狀表的更新,每個結點P,當實體指向環中的下一個結點時,Fp[l]是正確的,即后繼者是p+1 ;每個結點P定期地運行一個進程來與succ (p+1)聯系,并請求返回pred(succ (p+1));如果p=pred(succ (p+1)),那么P就知道它的信息與其后繼者的是一致的;否則,如果P的后繼者更新了它的前繼者,那么顯然有一個新的結點q加入該系統,而且有P < q≤SUCC (p+1),這樣p就需要將其Fp [1]調整為指向q ;此時,檢查q是否將p記作其前繼者;如果沒有,就需要再次調整Fp[l]。
4.根據權利要求3所述的基于HDFS的小文件優化存儲方法,其特征在于,所述步驟3)進一步包含以下步驟: . 3.1)將兀數據鍵值key的生成分解為DirectoryID和SmallFilelD ;DirectoryID在NameNode端生成,作為元數據跳轉到元數據集群中結點的key值,實現了同一目錄下文件存儲到同一結點;SmalIFiIeID在元數據結點中生成,實現每一個元數據對應一個全局唯一的ID標識; 。 3.2)根據多叉樹深度遍歷的方式,基于深度的分配算法給每一個目錄層次分配一個空間段,空間段由一個或者多個位組成,分配順序位從左向右; . 3.3)采用多叉樹深度遍歷方式,小對文件定位與訪問。
5.根據權利要求4所述的基于HDFS的小文件優化存儲方法,其特征在于,所述步驟.3.3)進一步包含以下步驟: . 3.3.1)文件目錄解析:將文件路徑以字符串數組的方式存儲,計算并初始化目錄的層數,然后使用基于深度分配算法實現將文件目錄轉換為DirectoryID ; 。3.3.2)文件名解析:解析得到DirectoryID后,根據Chord協議,跳轉到相應結點,對文件名進行解析,將解析結果與DirectoryID相加后,得到SmallFilelD ; 。 3.3.3)元數據存儲在以SmallFilelD為key值,元數據為value值的〈key, value〉鍵值對數組中;采用折半查找 法,查找小文件元數據。
【文檔編號】G06F3/06GK103577123SQ201310561745
【公開日】2014年2月12日 申請日期:2013年11月12日 優先權日:2013年11月12日
【發明者】毛鶯池, 閔偉, 戚榮志, 陳曦, 王康, 任道寧 申請人:河海大學