專(zhuān)利名稱(chēng):基于hdfs分布式文件系統(tǒng)的數(shù)據(jù)冗余及文件操作方法
技術(shù)領(lǐng)域:
本發(fā)明屬于數(shù)字信息存儲(chǔ)技術(shù)領(lǐng)域,特別涉及基于Hadoop Distributed File Syetem(HDFS)分布式文件系統(tǒng)的數(shù)據(jù)冗余和文件操作方法,可用于文件系統(tǒng)的存儲(chǔ)和管理。
背景技術(shù):
隨著信息技術(shù)的發(fā)展,存儲(chǔ)數(shù)據(jù)在爆炸式的增長(zhǎng),本地的存儲(chǔ)很難滿(mǎn)足不斷增長(zhǎng)的海量存儲(chǔ)的需要,加上個(gè)人移動(dòng)計(jì)算和企業(yè)級(jí)的大規(guī)模計(jì)算對(duì)底層存儲(chǔ)系統(tǒng)提出更高的要求,人們?cè)絹?lái)越多的使用分布式文件系統(tǒng),因?yàn)樗芙o人們帶來(lái)更高的存儲(chǔ)能力、可靠性、安全性和移動(dòng)性。目前,分布式文件系統(tǒng)有Sim公司開(kāi)發(fā)的NFS分布式文件系統(tǒng),它是第一個(gè)基于IP 協(xié)議分布式文件系統(tǒng),微軟研究院的Farsite系統(tǒng),加州大學(xué)圣地亞哥分校的TotalRecall 系統(tǒng),亞馬遜公司的Dynamo系統(tǒng),以及Google公司為其商業(yè)應(yīng)用開(kāi)發(fā)的GFS和Apache基金會(huì)開(kāi)發(fā)的HDFS。HDFS是GFS的開(kāi)源實(shí)現(xiàn),有著大量的參考文檔和實(shí)驗(yàn)方式,HDFS采用master/ slave架構(gòu),如圖1所示。HDFS集群是由一個(gè)Namenode結(jié)點(diǎn)和多個(gè)Datanode結(jié)點(diǎn)組成。 Namenode結(jié)點(diǎn)是一個(gè)中心服務(wù)器,相當(dāng)于GFS中Master結(jié)點(diǎn)。其負(fù)責(zé)管理文件系統(tǒng)的名字空間以及客戶(hù)端對(duì)文件的訪問(wèn),比如打開(kāi)、關(guān)閉、重命名文件或目錄操作等。Datanode結(jié)點(diǎn)當(dāng)于GFS中Chunk Server結(jié)點(diǎn),負(fù)責(zé)管理它所在結(jié)點(diǎn)上塊數(shù)據(jù)的存儲(chǔ)。即在Namenode結(jié)點(diǎn)的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制。為了保證數(shù)據(jù)的可用性,現(xiàn)實(shí)中的分布式存儲(chǔ)系統(tǒng)都對(duì)數(shù)據(jù)采取冗余技術(shù)。冗余技術(shù)包括兩大類(lèi)完整副本冗余和編碼冗余。HDFS的數(shù)據(jù)冗余機(jī)制采取復(fù)制機(jī)制,默認(rèn)情況下系統(tǒng)分布式存儲(chǔ)三份副本,分散存儲(chǔ)在系統(tǒng)Datanode結(jié)點(diǎn),這樣雖然能夠保證數(shù)據(jù)恢復(fù)的完整性,但造成了系統(tǒng)資源的巨大浪費(fèi)。HDFS文件操作包括文件寫(xiě)入、文件讀取、文件追加和文件刪除,由于采用三個(gè)副本的數(shù)據(jù)冗余方案,帶來(lái)文件讀取和文件寫(xiě)入效率和性能上的損失。
發(fā)明內(nèi)容
本發(fā)明的目的在于克服上述已有技術(shù)的不足,提出了一種基于HDFS分布式文件系統(tǒng)的數(shù)據(jù)冗余方法和文件操作方法,有效地在數(shù)據(jù)可靠性和讀寫(xiě)性能間取得了平衡,在相同的冗余度下提高了文件的讀取和文件寫(xiě)入的性能和效率,縮減了系統(tǒng)硬盤(pán)的存儲(chǔ)空間。為實(shí)現(xiàn)上述目的,本發(fā)明基于HDFS分布式文件系統(tǒng)的數(shù)據(jù)冗余方法,包括如下步驟(1)將文件數(shù)據(jù)進(jìn)行分段,每個(gè)文件段的基本長(zhǎng)度為64MB,如果不足64MB的文件段數(shù)據(jù)結(jié)尾用O填補(bǔ);
(2)將分好的文件段分為等長(zhǎng)的基本塊,并且將這些基本塊存儲(chǔ)在同一 Datanode 結(jié)點(diǎn)的Block塊中,同時(shí)對(duì)存儲(chǔ)在Block塊中的數(shù)據(jù)生成校驗(yàn)和,存入文件元數(shù)據(jù)表中;(3)對(duì)基本塊數(shù)據(jù)進(jìn)行編碼,得到編碼塊,將這些編碼塊、對(duì)應(yīng)的編碼系數(shù)和 Block標(biāo)志發(fā)送到系統(tǒng)的不同于基本塊的Datanode結(jié)點(diǎn);(4)收到編碼塊的節(jié)點(diǎn)將編碼塊保存在本地Block塊上,并對(duì)這些編碼塊生成校驗(yàn)和,將Block標(biāo)志、校驗(yàn)和、編碼系數(shù)寫(xiě)入附加文件中,完成數(shù)據(jù)冗余。為實(shí)現(xiàn)上述目的,本發(fā)明基于HDFS分布式文件系統(tǒng)的文件操作方法,包括(A)文件寫(xiě)入步驟Al)客戶(hù)端向Namenode結(jié)點(diǎn)發(fā)出文件寫(xiě)請(qǐng)求;A2)Namenode結(jié)點(diǎn)在文件命名空間里查詢(xún)是否存在相同的文件請(qǐng)求名,如果存在, 則要求客戶(hù)端更改文件名,如果不存在,則為該客戶(hù)指定一個(gè)主結(jié)點(diǎn),并且將其它結(jié)點(diǎn)作為該客戶(hù)端的次結(jié)點(diǎn);A3)客戶(hù)端將數(shù)據(jù)發(fā)送給主結(jié)點(diǎn),主結(jié)點(diǎn)對(duì)接收到的數(shù)據(jù)進(jìn)行冗余首先,由主結(jié)點(diǎn)將數(shù)據(jù)劃分成文件段,每個(gè)文件段的基本長(zhǎng)度為64MB,如果不足 64MB的文件段數(shù)據(jù)結(jié)尾用O填補(bǔ);其次,將分好的文件段分為等長(zhǎng)的基本塊,并且將這些基本塊存儲(chǔ)在同一 Datanode結(jié)點(diǎn)的Block塊中,同時(shí)對(duì)存儲(chǔ)在Block塊中的數(shù)據(jù)生成校驗(yàn)和,存入文件元數(shù)據(jù)表中;再次,對(duì)基本塊數(shù)據(jù)進(jìn)行編碼,得到編碼塊,將這些編碼塊對(duì)應(yīng)的編碼向量和 Block標(biāo)志發(fā)送到各個(gè)次結(jié)點(diǎn);最后,由收到編碼塊的次節(jié)點(diǎn)將編碼塊保存在本地Block塊上,并對(duì)這些編碼塊生成校驗(yàn)和,將Block標(biāo)志、校驗(yàn)和、編碼向量寫(xiě)入附加文件中,完成數(shù)據(jù)冗余;A4)數(shù)據(jù)冗余結(jié)束后,主結(jié)點(diǎn)向客戶(hù)端報(bào)告寫(xiě)入文件完成;(B)文件讀取步驟Bi)客戶(hù)端聯(lián)系Namenode結(jié)點(diǎn),發(fā)送文件讀取請(qǐng)求;B2) Namenode結(jié)點(diǎn)在文件命名空間中查詢(xún)請(qǐng)求的文件是否存在,若不存在回復(fù)“文件不存在”,否則查詢(xún)主結(jié)點(diǎn)和次結(jié)點(diǎn)的位置、各基本塊和編碼塊的標(biāo)志信息,發(fā)送給客戶(hù)端;B3)客戶(hù)端向主節(jié)點(diǎn)發(fā)送基本塊、編碼塊及次結(jié)點(diǎn)的信息,收到信息后,主結(jié)點(diǎn)查找基本塊并驗(yàn)證完整性,若數(shù)據(jù)完整則發(fā)送給客戶(hù)端,讀取結(jié)束,否則,聯(lián)系載有相關(guān)編碼塊的次結(jié)點(diǎn);B4)收到請(qǐng)求的次結(jié)點(diǎn)將編碼塊和編碼系數(shù)向量發(fā)送給主結(jié)點(diǎn),主結(jié)點(diǎn)用收到的編碼塊和編碼系數(shù)恢復(fù)原始數(shù)據(jù)并發(fā)送給客戶(hù)端,讀取結(jié)束;(C)文件追加步驟Cl)客戶(hù)端聯(lián)系Namenode結(jié)點(diǎn),發(fā)送文件追加請(qǐng)求;C2) Namenode結(jié)點(diǎn)檢測(cè)文件名是否有追加文件,如果有,則委托主結(jié)點(diǎn)將追加信息放在原來(lái)最后一個(gè)基本塊后,并且刪除填充的0,如果不存在該文件,則向客戶(hù)端返回“該文件不存在,無(wú)法追加”的信息;(D)文件刪除步驟
Dl)客戶(hù)端聯(lián)系Namenode結(jié)點(diǎn),發(fā)送文件刪除請(qǐng)求;D2)Namenode結(jié)點(diǎn)立刻把刪除操作以日志的方式記錄下來(lái),將文件名改為一個(gè)包含刪除時(shí)間戳的、隱藏的名字,并進(jìn)行如下操作對(duì)文件系統(tǒng)命名空間做常規(guī)掃描時(shí),刪除三天前的隱藏文件;對(duì)Block命名空間做常規(guī)掃描時(shí),找到不被任何文件包含的Block,同時(shí)刪除它的元數(shù)據(jù);在與Datanode結(jié)點(diǎn)交互時(shí),Datanode結(jié)點(diǎn)向Namenode結(jié)點(diǎn)報(bào)告自己擁有的 Block信息,Namenode結(jié)點(diǎn)向Datanode結(jié)點(diǎn)回復(fù)已經(jīng)不存在的那些Block元數(shù)據(jù)信息,由 Datanode結(jié)點(diǎn)對(duì)這些不存在元數(shù)據(jù)Block進(jìn)行任意刪除。本發(fā)明與現(xiàn)有技術(shù)相比具有以下優(yōu)點(diǎn)第一,由于本發(fā)明的數(shù)據(jù)冗余機(jī)制的復(fù)制部分采用只存儲(chǔ)文件的一個(gè)基本塊,克服了現(xiàn)有HDFS分布式文件系統(tǒng)存儲(chǔ)三個(gè)副本,存儲(chǔ)空間較大的缺點(diǎn),可在占用存儲(chǔ)空間更小的情況下達(dá)到與現(xiàn)有HDFS系統(tǒng)相同的數(shù)據(jù)可靠性,這在存儲(chǔ)海量數(shù)據(jù)時(shí)有利于節(jié)省寶貴的硬盤(pán)資源。第二,由于本發(fā)明的數(shù)據(jù)冗余機(jī)制編碼部分采用在伽羅華域GW216)上隨機(jī)線(xiàn)性網(wǎng)絡(luò)編碼的編碼方式以及編碼塊隨機(jī)放置的方法,克服了現(xiàn)有HDFS分布式文件系統(tǒng)數(shù)據(jù)失效率較高、可靠性差的缺點(diǎn),在相同的宕機(jī)率下,本發(fā)明的數(shù)據(jù)失效率明顯降低,而且在保證宕機(jī)率小于0. 15的情況下數(shù)據(jù)失效的可能性無(wú)限接近于0,這有助于在大規(guī)??蛻?hù)端讀取的情況下存儲(chǔ)系統(tǒng)提供近乎百分百可靠的服務(wù),在商業(yè)環(huán)境下具有非?,F(xiàn)實(shí)的意義。第三,由于本發(fā)明在文件讀取操作上采用先讀取基本塊,若基本塊讀取失敗,再讀取編碼塊的方法,克服了現(xiàn)有HDFS系統(tǒng)文件讀取操作花費(fèi)時(shí)間較長(zhǎng)的缺點(diǎn),讀取相同大小的文件,本發(fā)明花費(fèi)的時(shí)間更短,因此,效率更高,提高了分布式文件管理系統(tǒng)的整體性能。
圖1為現(xiàn)有HDFS系統(tǒng)框架圖2為本發(fā)明數(shù)據(jù)冗余流程圖3為本發(fā)明數(shù)據(jù)冗余過(guò)程中對(duì)文件進(jìn)行分段、分塊、編碼的子流程圖
圖4為本發(fā)明數(shù)據(jù)冗余過(guò)程中對(duì)基本塊、編碼塊存儲(chǔ)的元數(shù)據(jù)表結(jié)構(gòu)圖
圖5為本發(fā)明文件操作總框圖6為本發(fā)明的文件寫(xiě)入操作的流程圖7為本發(fā)明的文件讀取操作的流程圖8為本發(fā)明的文件追加操作的流程圖9為本發(fā)明的文件刪除操作的流程圖。
具體實(shí)施例方式下面結(jié)合附圖對(duì)發(fā)明做進(jìn)一步的詳細(xì)描述。參照?qǐng)D2,本發(fā)明的數(shù)據(jù)冗余具體步驟如下步驟1 對(duì)文件進(jìn)行分段,文件段的大小以基本分塊數(shù)為單位,默認(rèn)每個(gè)文件段由 16個(gè)基本塊組成,每個(gè)基本塊的大小為4MB,因此,每個(gè)文件段數(shù)據(jù)長(zhǎng)度為64MB,如果不足64MB的文件段數(shù)據(jù)結(jié)尾用0填補(bǔ)。對(duì)于文件段非定長(zhǎng)的情況,如圖3,文件長(zhǎng)度為74MB,只能分成兩個(gè)文件段,文件段1分成16個(gè)4MB的基本塊,文件段2分成3個(gè)4MB的基本塊,前兩個(gè)基本塊中的文件來(lái)自于文件中,后一個(gè)基本塊只有2MB的數(shù)據(jù)來(lái)自原始文件,后面的數(shù)據(jù)用0填充。步驟2 對(duì)文件段生成基本塊,并且存儲(chǔ)基本塊數(shù)據(jù)。2a)將分好的文件段分為等長(zhǎng)的基本塊,每個(gè)基本塊的大小為4MB,Namenode結(jié)點(diǎn)將這些基本塊存儲(chǔ)在同一 Datanode結(jié)點(diǎn)的Block塊中,每個(gè)Block塊的大小也為4MB,以避免系統(tǒng)內(nèi)部碎塊的出現(xiàn);2b)Namenode結(jié)點(diǎn)給每個(gè)Datanode結(jié)點(diǎn)的Block塊分配一個(gè)不變的,全球唯一的 64位Block標(biāo)識(shí)符,同時(shí)對(duì)存儲(chǔ)在Block塊中的數(shù)據(jù)生成校驗(yàn)和,存入文件元數(shù)據(jù)表中,文件元數(shù)據(jù)表的格式如圖4所示,第一行包括文件的分段數(shù)N,第二行包括段數(shù)編號(hào)、校驗(yàn)和、實(shí)際數(shù)據(jù)長(zhǎng)度、基本塊Block標(biāo)志和編碼塊Block標(biāo)志。校驗(yàn)和是用來(lái)驗(yàn)證數(shù)據(jù)讀取的完整性,由于部分基本塊可能被O填充,需要知道實(shí)際數(shù)據(jù)長(zhǎng)度,基本塊Block標(biāo)志引導(dǎo)讀寫(xiě)基本塊,編碼塊Block標(biāo)志引導(dǎo)讀寫(xiě)編碼塊信息;2c) Datanode結(jié)點(diǎn)把Block塊以Iinux形式保存在本地硬盤(pán)上。步驟3 對(duì)基本塊數(shù)據(jù)采用隨機(jī)線(xiàn)性網(wǎng)絡(luò)編碼方法進(jìn)行編碼,得到編碼塊。3a)將數(shù)據(jù)塊按照文件的分塊順序組合在一起,表示為KAL XiL Xn],1彡i彡n, η表示文件總的分塊數(shù),Xi表示文件基本數(shù)據(jù)塊;3b)在伽羅華域GFQ16)上隨機(jī)選擇一組系數(shù)序列& = (gja, gJj2, L ,用這組序列與數(shù)據(jù)塊進(jìn)行如下運(yùn)算,得到信息向量
ηYj=Y^guX1
/=1其中,1 < i < n,j是任意正整數(shù),Xi表示文件基本數(shù)據(jù)塊,gj, i表示系數(shù)序列& 的任意一個(gè)元素;3c)根據(jù)信息向量公式對(duì)數(shù)據(jù)塊[XJ2L XiL Xn]進(jìn)行m次運(yùn)算,完成整個(gè)編碼,即Y1 = g1,1Xi+gi,2X2+L+g1,nXnY2 = &,A+g2,2X2+L+g2,nXn
Is Is IsIsYm = gm,1Xi+gm,2X2+L+gm,nXn其中,m是該文件段的編碼塊個(gè)數(shù),m大于n,(Y1, Y2, L Yffl)是編碼塊,(gl,g2,L gm) 是對(duì)應(yīng)編碼塊的編碼系數(shù)。將這些編碼塊、對(duì)應(yīng)的編碼系數(shù)和Block標(biāo)志發(fā)送到系統(tǒng)的不同于基本塊的Datanode結(jié)點(diǎn)。步驟4 收到編碼塊的Datanode結(jié)點(diǎn)將編碼塊保存在本地Block塊上,并對(duì)這些編碼塊生成校驗(yàn)和,將Block標(biāo)志、校驗(yàn)和、基本塊個(gè)數(shù)以附加文件的形式永久保存在 Datanode結(jié)點(diǎn),完成數(shù)據(jù)冗余。參照?qǐng)D5,對(duì)本發(fā)明的文件操作做進(jìn)一步描述文件操作包括文件寫(xiě)入、文件讀取、文件追加和文件刪除四個(gè)部分,各部分相互獨(dú)立,分別描述如下
參照?qǐng)D6,本發(fā)明對(duì)文件進(jìn)行如下寫(xiě)入操作與傳統(tǒng)的HDFS文件系統(tǒng)的寫(xiě)入操作相比,本發(fā)明在復(fù)制的同時(shí)還伴隨著編碼過(guò)程,因此,必須首先選擇一個(gè)性能良好的主機(jī)結(jié)點(diǎn),委托它進(jìn)行數(shù)據(jù)的編碼工作,文件寫(xiě)入操作的具體步驟如下步驟一客戶(hù)端向Namenode結(jié)點(diǎn)發(fā)出文件寫(xiě)請(qǐng)求,包含請(qǐng)求的文件名和文件的大步驟二 =Namenode結(jié)點(diǎn)在文件命名空間里查詢(xún)是否存在相同的文件請(qǐng)求名,如果存在相同的文件,則向用戶(hù)端回復(fù)“存在同名文件”,要求客戶(hù)端更改文件名,如果不存在相同的文件,則為該客戶(hù)端指定一個(gè)主結(jié)點(diǎn),分配Block標(biāo)志,并且將其它結(jié)點(diǎn)作為該客戶(hù)端的次結(jié)點(diǎn),并將這些信息發(fā)送給客戶(hù)端;步驟三客戶(hù)端將數(shù)據(jù)發(fā)送給主結(jié)點(diǎn),如果在設(shè)定的時(shí)間間隔內(nèi),主結(jié)點(diǎn)沒(méi)有回復(fù)任何收到連接的信息,表明主結(jié)點(diǎn)正處于繁忙或者無(wú)連接狀態(tài),這時(shí),客戶(hù)端向Namenode 申請(qǐng)重新選定主結(jié)點(diǎn),寫(xiě)入結(jié)束。如果客戶(hù)端在設(shè)定的時(shí)間內(nèi),成功收到主結(jié)點(diǎn)回復(fù)的正常連接信息,表明主結(jié)點(diǎn)已經(jīng)成功接收到了客戶(hù)端發(fā)出的數(shù)據(jù)信息。主結(jié)點(diǎn)對(duì)接收到的數(shù)據(jù)進(jìn)行冗余3a)由主結(jié)點(diǎn)將數(shù)據(jù)劃分成文件段,每個(gè)文件段的基本長(zhǎng)度為64MB,如果不足 64MB的文件段數(shù)據(jù)結(jié)尾用0填補(bǔ);3b)將分好的文件段分為等長(zhǎng)的基本塊,并且將這些基本塊存儲(chǔ)在同一 Datanode 結(jié)點(diǎn)的Block塊中,同時(shí)對(duì)存儲(chǔ)在Block塊中的數(shù)據(jù)生成校驗(yàn)和,存入文件元數(shù)據(jù)表中;3c)對(duì)基本塊數(shù)據(jù)進(jìn)行編碼,得到編碼塊,將這些編碼塊對(duì)應(yīng)的編碼向量和Block 標(biāo)志發(fā)送到各個(gè)次結(jié)點(diǎn);3d).由收到編碼塊的次節(jié)點(diǎn)將編碼塊保存在本地Block塊上,并對(duì)這些編碼塊生成校驗(yàn)和,將Block標(biāo)志、校驗(yàn)和、編碼向量寫(xiě)入附加文件中,完成數(shù)據(jù)冗余;步驟四數(shù)據(jù)冗余結(jié)束后,主結(jié)點(diǎn)向客戶(hù)端報(bào)告寫(xiě)入文件完成,并且將每個(gè)文件段的校驗(yàn)和發(fā)送給Namenode結(jié)點(diǎn),向Namenode結(jié)點(diǎn)報(bào)告寫(xiě)入完成。參照?qǐng)D7,本發(fā)明對(duì)文件進(jìn)行如下讀取操作為了優(yōu)化讀取性能,將優(yōu)先讀取完整的副本,即各個(gè)文件段的基本塊。只有當(dāng)基本塊讀取失敗后,才搜集比基本分塊數(shù)多的編碼塊解碼得到原始數(shù)據(jù)。解碼操作委托給主節(jié)點(diǎn)進(jìn)行,因?yàn)橛?jì)算量比較大,需要主節(jié)點(diǎn)的性能滿(mǎn)足一定的要求,否則更換主節(jié)點(diǎn)??蛻?hù)端既可能是讀取整個(gè)文件,也可能是讀取某一部分,所以發(fā)出文件讀取請(qǐng)求時(shí)需要指定文件名和起始位置,讀取文件的步驟如下步驟1 客戶(hù)端聯(lián)系Namenode結(jié)點(diǎn),發(fā)送文件讀取請(qǐng)求,包含請(qǐng)求的文件名和起始長(zhǎng)度;步驟2 =Namenode結(jié)點(diǎn)在文件命名空間中查詢(xún)請(qǐng)求的文件是否存在,若不存在請(qǐng)求文件名,則回復(fù)“文件不存在”,讀取結(jié)束,否則根據(jù)客戶(hù)端的請(qǐng)求文件名在元數(shù)據(jù)表中查詢(xún)主結(jié)點(diǎn)和次結(jié)點(diǎn)的位置、各基本塊和編碼塊的Block標(biāo)志信息及文件段校驗(yàn)和,將這些信息發(fā)送給客戶(hù)端;步驟3 客戶(hù)端連接主結(jié)點(diǎn),如果在設(shè)定的時(shí)間間隔內(nèi),主結(jié)點(diǎn)沒(méi)有回復(fù)任何收到連接的信息,表明主結(jié)點(diǎn)正處于繁忙或者無(wú)連接狀態(tài),這時(shí),客戶(hù)端向Namenode結(jié)點(diǎn)申請(qǐng)重新選定主結(jié)點(diǎn),讀取結(jié)束;如果客戶(hù)端在設(shè)定的時(shí)間內(nèi),成功收到主結(jié)點(diǎn)回復(fù)的正常連接信息,表明主結(jié)點(diǎn)已經(jīng)成功接收到了客戶(hù)端發(fā)出的連接請(qǐng)求信息,此時(shí),客戶(hù)端向主節(jié)點(diǎn)發(fā)送基本塊Block標(biāo)志、編碼塊Block標(biāo)志及次結(jié)點(diǎn)信息,主節(jié)點(diǎn)收到信息后,查找附加文件, 并根據(jù)附加文件中存儲(chǔ)的基本分塊數(shù)和收到的基本塊Block標(biāo)志驗(yàn)證收到基本塊的完整性,若數(shù)據(jù)完整則將基本塊數(shù)據(jù)發(fā)送給客戶(hù)端,讀取結(jié)束,否則,聯(lián)系載有相關(guān)編碼塊的次步驟4:收到請(qǐng)求的次結(jié)點(diǎn)將編碼塊和編碼系數(shù)發(fā)送給主結(jié)點(diǎn),主結(jié)點(diǎn)用收到的編碼塊和編碼系數(shù)恢復(fù)原始數(shù)據(jù),其步驟如下4a)主結(jié)點(diǎn)收到數(shù)據(jù)包集合(gl, Y1), (g2,Y2), L (^Y1), L Um),其中,gj =
(gj,l' gj,2' L gj,n);4b)解線(xiàn)性方程組Yj =
L ^=I J \<j<m其中,Yj表示收到的編碼向量,gj, i表示&的任意元素,Xi是所要求解的未知數(shù), 由方程表示式可知該方程有m個(gè)等式和η個(gè)未知數(shù),如果m > ι!時(shí),求解\,恢復(fù)出原始數(shù)據(jù),發(fā)送給客戶(hù)端;如果m < η時(shí),無(wú)法求解&,讀取結(jié)束。參照?qǐng)D8,本發(fā)明對(duì)文件進(jìn)行追加操作,步驟如下步驟A 客戶(hù)端聯(lián)系Namenode結(jié)點(diǎn),發(fā)送文件追加請(qǐng)求,包含請(qǐng)求追加的文件名和文件的大小。步驟B =Namenode結(jié)點(diǎn)在文件命名空間里查詢(xún)是否存在需要追加的文件名,如果不存在需要追加的文件名,則向用戶(hù)端回復(fù)“該文件不存在,無(wú)法追加”的信息;如果存在需要追加的文件名,則為該客戶(hù)指定一個(gè)主結(jié)點(diǎn),并根據(jù)客戶(hù)端的請(qǐng)求追加文件名在元數(shù)據(jù)表中查詢(xún)各基本塊Block標(biāo)志、編碼塊Block標(biāo)志及文件段校驗(yàn)和,將這些信息發(fā)送
給客戶(hù)端。步驟C:客戶(hù)端連接主結(jié)點(diǎn),如果在設(shè)定的時(shí)間間隔內(nèi),主結(jié)點(diǎn)沒(méi)有回復(fù)任何收到連接的信息,表明主結(jié)點(diǎn)正處于繁忙或者無(wú)連接狀態(tài),這時(shí),客戶(hù)端向Namenode結(jié)點(diǎn)申請(qǐng)重新選定主結(jié)點(diǎn),追加結(jié)束。如果客戶(hù)端在設(shè)定的時(shí)間內(nèi),成功收到主結(jié)點(diǎn)回復(fù)的正常連接信息,表明主結(jié)點(diǎn)已經(jīng)成功接收到了客戶(hù)端發(fā)出的連接請(qǐng)求信息。此時(shí),客戶(hù)端向主節(jié)點(diǎn)發(fā)送追加文件的各基本塊和編碼塊的Block標(biāo)志信息,文件段校驗(yàn)和以及需要追加的文件內(nèi)容。步驟D 主結(jié)點(diǎn)對(duì)收到的追加文件內(nèi)容進(jìn)行數(shù)據(jù)冗余,將追加的內(nèi)容放在原來(lái)最后一個(gè)基本塊后,刪除填充的0,重新選擇編碼系數(shù),生成編碼塊,更新文件的基本塊和編碼塊的Block標(biāo)志信息以及文件段校驗(yàn)和,將這些信息返回給Namenode結(jié)點(diǎn),并向客戶(hù)端返回追加文件成功。參照?qǐng)D9,對(duì)本發(fā)明的文件讀刪除進(jìn)行作述文件刪除是將文件的元數(shù)據(jù)從NameNode結(jié)點(diǎn)刪除,并在DataNode結(jié)點(diǎn)上刪除各個(gè)基本塊和編碼塊及相關(guān)附加數(shù)據(jù),因?yàn)槲募欠植际酱鎯?chǔ)的,在刪除的時(shí)候可能還有多個(gè)客戶(hù)端讀取,所以Namenode結(jié)點(diǎn)必須對(duì)文件系統(tǒng)命名空間、Block命名空間做定時(shí)掃描,對(duì)Datanode結(jié)點(diǎn)做定時(shí)交互,具體步驟如下步驟a 客戶(hù)端聯(lián)系Namenode結(jié)點(diǎn),向Namenode結(jié)點(diǎn)發(fā)送請(qǐng)求刪除的文件名。步驟b =Namenode結(jié)點(diǎn)立刻把刪除操作以日志的方式記錄下來(lái),在文件命名空間里查詢(xún)?cè)撐募绻樵?xún)?cè)撐募淮嬖?,向客?hù)端返回“文件不存在,無(wú)法刪除”的信息,刪除結(jié)束,否則,將該文件名隱藏,稱(chēng)為隱藏文件,并且在文件名中記錄此刻時(shí)間,將此刻時(shí)間作為該文件的刪除時(shí)間,再做如下操作對(duì)文件系統(tǒng)命名空間做常規(guī)掃描,刪除三天前的隱藏文件;對(duì)Block命名空間做常規(guī)掃描,找到不被任何文件包含的Block,同時(shí)刪除它的元數(shù)據(jù);在與Datanode結(jié)點(diǎn)交互時(shí),Datanode結(jié)點(diǎn)向Namenode結(jié)點(diǎn)報(bào)告自己擁有的 Block信息,Namenode結(jié)點(diǎn)向Datanode結(jié)點(diǎn)回復(fù)已經(jīng)不存在的那些Block元數(shù)據(jù)信息,由 Datanode結(jié)點(diǎn)對(duì)這些不存在元數(shù)據(jù)Block進(jìn)行任意刪除,文件刪除結(jié)束。
權(quán)利要求
1.基于HDFS分布式文件系統(tǒng)的數(shù)據(jù)冗余方法,包括如下步驟(1)將文件數(shù)據(jù)進(jìn)行分段,每個(gè)文件段的基本長(zhǎng)度為64MB,如果不足64MB的文件段數(shù)據(jù)結(jié)尾用0填補(bǔ);(2)將分好的文件段分為等長(zhǎng)的基本塊,并且將這些基本塊存儲(chǔ)在同一Datanode結(jié)點(diǎn)的Block塊中,同時(shí)對(duì)存儲(chǔ)在Block塊中的數(shù)據(jù)生成校驗(yàn)和,存入文件元數(shù)據(jù)表中;(3)對(duì)基本塊數(shù)據(jù)進(jìn)行編碼,得到編碼塊,將這些編碼塊、對(duì)應(yīng)的編碼系數(shù)和Block標(biāo)志發(fā)送到系統(tǒng)的不同于基本塊的Datanode結(jié)點(diǎn);(4)收到編碼塊的Datanode結(jié)點(diǎn)將編碼塊保存在本地Block塊上,并對(duì)這些編碼塊生成校驗(yàn)和,將Block標(biāo)志、校驗(yàn)和、基本塊個(gè)數(shù)寫(xiě)入附加文件中,完成數(shù)據(jù)冗余。
2.根據(jù)權(quán)利要求1所述的數(shù)據(jù)冗余方法,其中步驟C3)所述的對(duì)基本塊數(shù)據(jù)進(jìn)行編碼, 采用隨機(jī)線(xiàn)性網(wǎng)絡(luò)編碼方法,具體步驟如下2a)將數(shù)據(jù)塊按照文件的分塊順序組合在一起,表示為[X1X2L XiL Xn],l彡i彡n,n表示文件總的分塊數(shù),Xi表示文件基本數(shù)據(jù)塊;2b)在伽羅華域GFQ16)上隨機(jī)選擇一組系數(shù)序列& = (gj.^gj^'L &,n),用這組序列與數(shù)據(jù)塊進(jìn)行如下運(yùn)算,得到信息向量/=1其中,1 < i < n,j是任意正整數(shù),Xi表示文件基本數(shù)據(jù)塊,h.i表示系數(shù)序列&的任意一個(gè)元素;2c)根據(jù)信息向量公式對(duì)數(shù)據(jù)塊[XJ2L XiL Xn]進(jìn)行m次運(yùn)算,完成整個(gè)編碼,即Y1 = gl,lXl+gl,2X2+L+g1,nXn Y2 = g2,lXl+g2,2X2+L+g2,nXnIs Is IsIsYm = gm.lXl+gmA+L+S^nXn其中,m是該文件段的編碼塊個(gè)數(shù),m大于n,(Y1, Y2, L Yffl)是編碼塊,(gl,g2,L gm)是對(duì)應(yīng)編碼塊的編碼系數(shù)。
3.根據(jù)權(quán)利要求1所述的數(shù)據(jù)冗余方法,其中步驟(2)所述的生成校驗(yàn)和,采用 CRC-32循環(huán)校驗(yàn)方法,每個(gè)基本塊和編碼塊的校驗(yàn)和都是32比特。
4.基于HDFS分布式文件系統(tǒng)的文件操作方法,包括(A)文件寫(xiě)入步驟Al)客戶(hù)端向Namenode發(fā)出文件寫(xiě)請(qǐng)求;A2) Namenode在文件命名空間里查詢(xún)是否存在相同的文件請(qǐng)求名,如果存在,則要求客戶(hù)端更改文件名,如果不存在,則為該客戶(hù)指定一個(gè)主結(jié)點(diǎn),并且將其它結(jié)點(diǎn)作為該客戶(hù)端的次結(jié)點(diǎn);A3)客戶(hù)端將數(shù)據(jù)發(fā)送給主結(jié)點(diǎn),主結(jié)點(diǎn)對(duì)接收到的數(shù)據(jù)進(jìn)行冗余首先,由主結(jié)點(diǎn)將數(shù)據(jù)劃分成文件段,每個(gè)文件段的基本長(zhǎng)度為64MB,如果不足64MB 的文件段數(shù)據(jù)結(jié)尾用O填補(bǔ);其次,將分好的文件段分為等長(zhǎng)的基本塊,并且將這些基本塊存儲(chǔ)在同一 Datanode結(jié)點(diǎn)的Block塊中,同時(shí)對(duì)存儲(chǔ)在Block塊中的數(shù)據(jù)生成校驗(yàn)和,存入文件元數(shù)據(jù)表中;再次,對(duì)基本塊數(shù)據(jù)進(jìn)行編碼,得到編碼塊,將這些編碼塊對(duì)應(yīng)的編碼向量和Block標(biāo)志發(fā)送到各個(gè)次結(jié)點(diǎn);最后,由收到編碼塊的次節(jié)點(diǎn)將編碼塊保存在本地Block塊上,并對(duì)這些編碼塊生成校驗(yàn)和,將Block標(biāo)志、校驗(yàn)和、編碼向量寫(xiě)入附加文件中,完成數(shù)據(jù)冗余;A4)數(shù)據(jù)冗余結(jié)束后,主結(jié)點(diǎn)向客戶(hù)端和Namenode結(jié)點(diǎn)報(bào)告寫(xiě)入文件完成;(B)文件讀取步驟Bi)客戶(hù)端聯(lián)系Namenode結(jié)點(diǎn),發(fā)送文件讀取請(qǐng)求;B2)Namenode結(jié)點(diǎn)在文件命名空間中查詢(xún)請(qǐng)求的文件是否存在,若不存在回復(fù)“文件不存在”,否則查詢(xún)主結(jié)點(diǎn)和次結(jié)點(diǎn)的位置、各基本塊和編碼塊的標(biāo)志信息,發(fā)送給客戶(hù)端;B3)客戶(hù)端向主節(jié)點(diǎn)發(fā)送基本塊、編碼塊及次結(jié)點(diǎn)的信息,收到信息后,主結(jié)點(diǎn)查找基本塊并驗(yàn)證完整性,若數(shù)據(jù)完整則發(fā)送給客戶(hù)端,讀取結(jié)束,否則,聯(lián)系載有相關(guān)編碼塊的次結(jié)點(diǎn);B4)收到請(qǐng)求的次結(jié)點(diǎn)將編碼塊和編碼系數(shù)向量發(fā)送給主結(jié)點(diǎn),主結(jié)點(diǎn)用收到的編碼塊和編碼系數(shù)恢復(fù)原始數(shù)據(jù)并發(fā)送給客戶(hù)端,讀取結(jié)束;(C)文件追加步驟Cl)客戶(hù)端聯(lián)系Namenode結(jié)點(diǎn),發(fā)送文件追加請(qǐng)求;C2)Namenode結(jié)點(diǎn)檢測(cè)文件名是否有需要追加的文件,如果有,則委托主結(jié)點(diǎn)將追加信息放在原來(lái)最后一個(gè)基本塊后,并且刪除填充的0,如果不存在該文件,則向客戶(hù)端返回“該文件不存在,無(wú)法追加”的信息;(D)文件刪除步驟Dl)客戶(hù)端聯(lián)系Namenode結(jié)點(diǎn),發(fā)送文件刪除請(qǐng)求;D2)Namenode結(jié)點(diǎn)立刻把刪除操作以日志的方式記錄下來(lái),將文件名改為一個(gè)包含刪除時(shí)間戳的、隱藏的名字,并進(jìn)行如下操作對(duì)文件系統(tǒng)命名空間做常規(guī)掃描時(shí),刪除三天前的隱藏文件; 對(duì)Block命名空間做常規(guī)掃描時(shí),找到不被任何文件包含的Block,同時(shí)刪除它的元數(shù)據(jù);在與Datanode結(jié)點(diǎn)交互時(shí),Datanode結(jié)點(diǎn)向Namenode結(jié)點(diǎn)報(bào)告自己擁有的Block信息,Namenode結(jié)點(diǎn)向Datanode結(jié)點(diǎn)回復(fù)已經(jīng)不存在的那些Block元數(shù)據(jù)信息,由Datanode 結(jié)點(diǎn)對(duì)這些不存在元數(shù)據(jù)Block進(jìn)行任意刪除。
5.根據(jù)權(quán)利要求5所述的文件操作方法,其中B4)所述的主結(jié)點(diǎn)用收到的編碼塊和編碼系數(shù)恢復(fù)原始數(shù)據(jù)并發(fā)送給客戶(hù)端,其步驟如下5a)主結(jié)點(diǎn)收到數(shù)據(jù)包集合(S1J1), (g2,Y2),L· (^Y1), L Um),其中,& = (gj, 1' gj,2' L gj,n);5b)解線(xiàn)性方程組\Y}=ts}AL 廣 1J \<j<m其中,Yj表示收到的編碼向量,gj, i表示&的任意元素,Xi是所要求解的未知數(shù),由方程表示式可知該方程有m個(gè)等式和η個(gè)未知數(shù),如果m > ι!時(shí),求解\,恢復(fù)出原始數(shù)據(jù),發(fā)送給客戶(hù)端;如果m < η時(shí),無(wú)法求解&,讀取結(jié)束。
全文摘要
本發(fā)明公開(kāi)了一種基于HDFS分布式文件系統(tǒng)的數(shù)據(jù)冗余及文件操作方法。它包括文件寫(xiě)入、讀取、追加及刪除,其中文件寫(xiě)入包括客戶(hù)請(qǐng)求、分配主結(jié)點(diǎn)、文件分段、生成和存儲(chǔ)基本塊、生成和存儲(chǔ)編碼塊及主結(jié)點(diǎn)匯報(bào);文件讀取包括客戶(hù)請(qǐng)求、選擇主結(jié)點(diǎn)、發(fā)送信息數(shù)據(jù)、根據(jù)信息數(shù)據(jù)恢復(fù)原文件及主結(jié)點(diǎn)匯報(bào);文件追加包括客戶(hù)請(qǐng)求、查詢(xún)文件信息并分配主節(jié)點(diǎn)、對(duì)追加文件分段、生成和存儲(chǔ)基本塊、生成和存儲(chǔ)編碼塊及追加匯報(bào)。文件刪除包括客戶(hù)請(qǐng)求、刪除文件的文件名處理、刪除隱藏文件、刪除孤立Block元數(shù)據(jù)和刪除任意Block塊。本發(fā)明具有讀寫(xiě)性能和效率高,節(jié)約存儲(chǔ)資源、存儲(chǔ)可靠的優(yōu)點(diǎn),可用于分布式文件系統(tǒng)在大規(guī)模客戶(hù)訪問(wèn)下的存儲(chǔ)和管理。
文檔編號(hào)G06F17/30GK102419766SQ20111034041
公開(kāi)日2012年4月18日 申請(qǐng)日期2011年11月1日 優(yōu)先權(quán)日2011年11月1日
發(fā)明者吳昊, 張大洋, 李暉, 樊凱 申請(qǐng)人:西安電子科技大學(xué)