本發(fā)明涉及文件系統(tǒng)領(lǐng)域,尤其涉及一種文件存儲系統(tǒng)、數(shù)據(jù)調(diào)度方法及數(shù)據(jù)節(jié)點。
背景技術(shù):
Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS)是一種適合運行在通用硬件(commodity hardware)上的分布式文件系統(tǒng),具備高可擴展性,無需停機便能夠?qū)崿F(xiàn)動態(tài)擴容;高可靠性,能夠?qū)崿F(xiàn)數(shù)據(jù)自動檢測和復制以及高吞吐量訪問,消除訪問瓶頸等特性。
現(xiàn)有技術(shù)中,HDFS的系統(tǒng)架構(gòu)如圖1所示,包括:客戶端11和服務器群12。其中,客戶端11包括分布式文件系統(tǒng)(Distributed File System)模塊111和文件系統(tǒng)數(shù)據(jù)輸出流(FSData OutputStream)模塊112。服務器群采用主從結(jié)構(gòu),由一個名字節(jié)點(Name Node,NN)121和多個數(shù)據(jù)節(jié)點(Data Node,DN)122組成。其中,名字節(jié)點121是一個管理文件命名空間和調(diào)節(jié)客戶端訪問文件的主服務器;數(shù)據(jù)節(jié)點122,用于存儲數(shù)據(jù),一般一個數(shù)據(jù)節(jié)點對應一個服務器,每個數(shù)據(jù)節(jié)點對應一個分布式存儲子系統(tǒng),采用分布式存儲的存儲方式。
在利用上述HDFS系統(tǒng)進行寫數(shù)據(jù)之前,客戶端首先通過DistributedFileSystem模塊向遠程的NN節(jié)點發(fā)起RPC請求;NN節(jié)點在文件系統(tǒng)的命名空間中創(chuàng)建一個新的文件;DistributedFileSystem模塊向HDFS客戶端返回DFSOutputStream,然后客戶端開始寫數(shù)據(jù)??蛻舳碎_始寫入數(shù)據(jù),DFSOutputStream將數(shù)據(jù)分成塊,寫入數(shù)據(jù)隊列(data queue)中。Data queue由數(shù)據(jù)流(Data Streamer)讀取,并通知名字節(jié)點分配用于存儲數(shù)據(jù)塊的數(shù)據(jù)節(jié)點(每個數(shù)據(jù)塊默認對應3個數(shù)據(jù)節(jié)點)。Data Streamer采用流水線的形式將數(shù)據(jù)依次寫入分配的數(shù)據(jù)節(jié)點中 實現(xiàn)數(shù)據(jù)塊在多個數(shù)據(jù)節(jié)點之間的互相備份。例如:將數(shù)據(jù)塊寫入第一個數(shù)據(jù)節(jié)點;第一個數(shù)據(jù)節(jié)點將數(shù)據(jù)塊發(fā)送給第二個數(shù)據(jù)節(jié)點;第二個數(shù)據(jù)節(jié)點將數(shù)據(jù)塊發(fā)送給第三個數(shù)據(jù)節(jié)點。此外,每個數(shù)據(jù)節(jié)點對應有分布式存儲設(shè)備,所指的分布式存儲設(shè)備實際上由多個物理磁盤組成。數(shù)據(jù)節(jié)點將已寫入的塊數(shù)據(jù)通過IO轉(zhuǎn)發(fā)到分布式存儲設(shè)備內(nèi),觸發(fā)分布式存儲設(shè)備的寫流程,分布式存儲設(shè)備將數(shù)據(jù)寫到主物理磁盤,同時發(fā)送復制請求給備物理磁盤,實現(xiàn)分布式存儲設(shè)備上多備份數(shù)據(jù)(默認復制3份)寫入。當客戶端完成數(shù)據(jù)寫入后,Data Streamer關(guān)閉寫入流并通知名字節(jié)點數(shù)據(jù)寫入完畢。
現(xiàn)有的這種文件讀寫方法,只有在全部數(shù)據(jù)節(jié)點均完成數(shù)據(jù)的寫入才會進行下一個數(shù)據(jù)塊的寫操作過程,數(shù)據(jù)寫入速度較慢。
技術(shù)實現(xiàn)要素:
本發(fā)明提供一種文件存儲系統(tǒng)、數(shù)據(jù)調(diào)度方法及數(shù)據(jù)節(jié)點,能夠加快數(shù)據(jù)寫入速度。
為達到上述目的,本發(fā)明采用如下技術(shù)方案:
第一方面,本發(fā)明實施例提供一種文件存儲系統(tǒng),所述文件存儲系統(tǒng)的服務器側(cè)包括:
名字節(jié)點、主數(shù)據(jù)節(jié)點和至少一個備份數(shù)據(jù)節(jié)點;
所述主數(shù)據(jù)節(jié)點和至少一個備份數(shù)據(jù)節(jié)點共享第一分布式存儲子系統(tǒng),所述第一分布式存儲子系統(tǒng)包括一個主存儲設(shè)備和至少一個備份存儲設(shè)備;
其中,所述主數(shù)據(jù)節(jié)點,用于接收客戶端發(fā)送的寫操作指令,所述寫操作指令中包括待寫入數(shù)據(jù);將所述待寫入數(shù)據(jù)寫入第一分布式存儲子系統(tǒng)中;并且向第一備份數(shù)據(jù)節(jié)點發(fā)送更新請求,所述更新請求包括所述待寫入數(shù)據(jù)在所述第一分布式存儲子系統(tǒng)中的存儲位置和所述待寫入數(shù)據(jù)的屬性信息;
所述備份數(shù)據(jù)節(jié)點,用于接收更新請求;根據(jù)所述更新請求中的待寫入數(shù)據(jù)在所述第一分布式存儲子系統(tǒng)中的存儲位置以及所述待寫入數(shù)據(jù) 的屬性信息,在所述第一分布式存儲子系統(tǒng)中查找所述待寫入數(shù)據(jù);當查找到所述待寫入數(shù)據(jù)時,保存所述待寫入數(shù)據(jù)的屬性信息。
結(jié)合第一方面,在第一方面的第一種實現(xiàn)方式中,所述主數(shù)據(jù)節(jié)點對所述第一分布式存儲子系統(tǒng)的操作權(quán)限為允許進行讀寫操作;所述備份數(shù)據(jù)節(jié)點對所述第一分布式存儲子系統(tǒng)的操作權(quán)限為僅允許進行讀操作。
第二方面,本發(fā)明實施例還提供了一種數(shù)據(jù)調(diào)度方法,該方法應用于如第一方面所述的文件存儲系統(tǒng)中,所述方法包括:
主數(shù)據(jù)節(jié)點接收客戶端發(fā)送的寫操作指令,所述寫操作指令中包括待寫入數(shù)據(jù);
所述主數(shù)據(jù)節(jié)點將所述待寫入數(shù)據(jù)寫入第一分布式存儲子系統(tǒng)中;
所述主數(shù)據(jù)節(jié)點向第一備份數(shù)據(jù)節(jié)點發(fā)送更新請求,所述更新請求包括所述待寫入數(shù)據(jù)在所述第一分布式存儲子系統(tǒng)中的存儲位置和所述待寫入數(shù)據(jù)的屬性信息。
結(jié)合第二方面,在第二方面的第一種實現(xiàn)方式中,所述待寫入數(shù)據(jù)的屬性信息包括所述待寫入數(shù)據(jù)的名稱以及大小。
結(jié)合第二方面或者第二方面的第一種實現(xiàn)方式,在第二方面的第二種實現(xiàn)方式中,所述方法還包括:
當?shù)谝粩?shù)據(jù)節(jié)點發(fā)生故障時,恢復發(fā)生故障的數(shù)據(jù)節(jié)點的系統(tǒng)文件,得到恢復后的數(shù)據(jù)節(jié)點,所述第一數(shù)據(jù)節(jié)點為所有數(shù)據(jù)節(jié)點中的任意一個;
將所述第一分布式子系統(tǒng)掛載至所述恢復后的數(shù)據(jù)節(jié)點。
第三方面,本發(fā)明實施例還提供了一種數(shù)據(jù)調(diào)度方法,包括:
備份數(shù)據(jù)節(jié)點接收更新請求,所述更新請求包括所述待寫入數(shù)據(jù)在所述第一分布式存儲子系統(tǒng)中的存儲位置和所述待寫入數(shù)據(jù)的屬性信息;
所述備份數(shù)據(jù)節(jié)點根據(jù)所述待寫入數(shù)據(jù)在所述第一分布式存儲子系統(tǒng)中的存儲位置以及所述待寫入數(shù)據(jù)的屬性信息,在所述第一分布式存儲子系統(tǒng)中查找所述待寫入數(shù)據(jù);
當查找到所述待寫入數(shù)據(jù)時,所述備份數(shù)據(jù)節(jié)點保存所述待寫入數(shù)據(jù)的屬性信息。
第四方面,本發(fā)明實施例提供了一種數(shù)據(jù)節(jié)點,包括:
接收模塊,用于接收客戶端發(fā)送的寫操作指令,所述寫操作指令中包括待寫入數(shù)據(jù);
寫電路,用于將所述待寫入數(shù)據(jù)寫入第一分布式存儲子系統(tǒng)中;
發(fā)送模塊,用于向第一備份數(shù)據(jù)節(jié)點發(fā)送更新請求,所述更新請求包括所述待寫入數(shù)據(jù)在所述第一分布式存儲子系統(tǒng)中的存儲位置和所述待寫入數(shù)據(jù)的屬性信息。
結(jié)合第四方面,在第四方面的第一種實現(xiàn)方式中,所述待寫入數(shù)據(jù)的屬性信息包括所述待寫入數(shù)據(jù)的名稱以及大小。
第五方面,本發(fā)明實施例還提供了一種數(shù)據(jù)節(jié)點,包括:
接收模塊,用于接收更新請求,所述更新請求包括所述待寫入數(shù)據(jù)在所述第一分布式存儲子系統(tǒng)中的存儲位置和所述待寫入數(shù)據(jù)的屬性信息;
處理模塊,用于根據(jù)所述待寫入數(shù)據(jù)在所述第一分布式存儲子系統(tǒng)中的存儲位置以及所述待寫入數(shù)據(jù)的屬性信息,在所述第一分布式存儲子系統(tǒng)中查找所述待寫入數(shù)據(jù);
存儲模塊,用于當查找到所述待寫入數(shù)據(jù)時,所述備份數(shù)據(jù)節(jié)點保存所述待寫入數(shù)據(jù)的屬性信息。
本發(fā)明提供的文件存儲系統(tǒng),多個數(shù)據(jù)節(jié)點共享一個分布式存儲子系統(tǒng),且該分布式存儲子系統(tǒng)包括一個主存儲設(shè)備和至少一個備份存儲設(shè)備,能夠?qū)崿F(xiàn)數(shù)據(jù)在各個存儲設(shè)備之間的互相備份。在利用該文件存儲系統(tǒng)進行寫數(shù)據(jù)時,主數(shù)據(jù)節(jié)點將待寫入數(shù)據(jù)寫入第一分布式存儲子系統(tǒng),然后向第一備份數(shù)據(jù)節(jié)點發(fā)送更新請求以通知第一備份數(shù)據(jù)節(jié)點待寫入數(shù)據(jù)的屬性信息以及待寫入數(shù)據(jù)的存儲位置,第一備份數(shù)據(jù)節(jié)點根據(jù)該更新請求僅需要查看第一分布式存儲子系統(tǒng),確定第一分布式存儲子系統(tǒng)中已經(jīng)寫入了待寫入數(shù)據(jù)后,保存更新請求中的待寫入數(shù)據(jù)的屬性信息,便完成了對待寫入數(shù)據(jù)的寫過程。與現(xiàn)有技術(shù)中,所有數(shù)據(jù)節(jié)點都需要將待寫入數(shù)據(jù)分別寫入其對應的分布式存儲系統(tǒng)相比,本發(fā)明提供的數(shù)據(jù)調(diào)度的方法,雖然存在多個數(shù)據(jù)節(jié)點,但實際只有一個數(shù)據(jù)節(jié)點進行了數(shù)據(jù)寫入第一分布式操作系統(tǒng)的過程,其余數(shù)據(jù)節(jié)點則利用數(shù)據(jù)本地化特性,查看共享的分布式存儲子系統(tǒng),能夠減少數(shù)據(jù)在各個數(shù)據(jù)節(jié)點之間的網(wǎng)絡傳輸和存儲時間,進而加快數(shù)據(jù)寫入速度。
附圖說明
為了更清楚地說明本發(fā)明實施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面描述中的附圖僅僅是本發(fā)明的一些實施例,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1為現(xiàn)有技術(shù)中的HDFS的架構(gòu)示意圖;
圖2為本發(fā)明實施例提供的HDFS的架構(gòu)示意圖;
圖3為本發(fā)明實施例提供的一種數(shù)據(jù)調(diào)度方法的流程示意圖;
圖4為本發(fā)明實施例提供的另一種數(shù)據(jù)調(diào)度方法的流程示意圖;
圖5為本發(fā)明實施例提供的一種數(shù)據(jù)節(jié)點的示意圖;
圖6為本發(fā)明實施例提供的另一種數(shù)據(jù)節(jié)點的示意圖。
具體實施方式
下面將結(jié)合本實施例中的附圖,對本實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有作出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
本發(fā)明實施例提供一種文件存儲系統(tǒng),如圖2所示,包括:客戶端21和服務器群22。其中,客戶端包括分布式文件系統(tǒng)(Distributed File System)模塊211和文件系統(tǒng)數(shù)據(jù)輸出流(FSData OutputStream)模塊212。服務器群采用主從結(jié)構(gòu),包括名字節(jié)點221、主數(shù)據(jù)節(jié)點222和至少一個備份數(shù)據(jù)節(jié)點223;其中,主數(shù)據(jù)節(jié)點和至少一個備份數(shù)據(jù)節(jié)點共享第一分布式存儲子系統(tǒng)224,所述第一分布式存儲子系統(tǒng)224包括一個主存儲設(shè)備2241和至少一個備份存儲設(shè)備2242。
其中,服務器群中的各個節(jié)點(包括名字節(jié)點、主數(shù)據(jù)節(jié)點和備份數(shù)據(jù)節(jié)點)在物理實現(xiàn)上可相當于一個服務器。分布式存儲子系統(tǒng)以虛擬設(shè)備的方式提供給各個數(shù)據(jù)節(jié)點,在各個數(shù)據(jù)節(jié)點上體現(xiàn)為虛擬磁盤,對分布式子系統(tǒng)的讀寫類似于對本地物理磁盤的讀寫。而在物理實現(xiàn)上,分布 式子系統(tǒng)包括多個物理存儲設(shè)備,例如:多個硬盤;多個物理存儲設(shè)備之間的數(shù)據(jù)能夠?qū)崿F(xiàn)互相備份。
第一分布式存儲子系統(tǒng)能夠在各個數(shù)據(jù)節(jié)點之間實現(xiàn)共享。各個數(shù)據(jù)節(jié)點對第一分布式存儲子系統(tǒng)的操作權(quán)限可以不加限定,也可以進行特殊的規(guī)定。可選的,主數(shù)據(jù)節(jié)點222對第一分布式存儲子系統(tǒng)224的操作權(quán)限為允許進行讀寫操作;備份數(shù)據(jù)節(jié)點223對所述第一分布式存儲子系統(tǒng)224的操作權(quán)限為僅允許進行讀操作。
由于多個數(shù)據(jù)節(jié)點共享第一分布式存儲子系統(tǒng),因而當某個數(shù)據(jù)節(jié)點發(fā)生故障時,僅需要恢復發(fā)生故障的數(shù)據(jù)節(jié)點的系統(tǒng)文件,得到恢復后的數(shù)據(jù)節(jié)點,然后將第一分布式子系統(tǒng)掛載至恢復后的數(shù)據(jù)節(jié)點,即可實現(xiàn)該數(shù)據(jù)節(jié)點下第一分布式存儲子系統(tǒng)中的數(shù)據(jù)的恢復,而不需要采用復制數(shù)據(jù)的方式進行數(shù)據(jù)恢復,提高數(shù)據(jù)恢復的效率。
需要說明的是,本發(fā)明實施例提供的文件存儲系統(tǒng),各個數(shù)據(jù)節(jié)點除了共享該第一分布式存儲子系統(tǒng)外,每個數(shù)據(jù)節(jié)點還可能分別獨立對應分布式存儲子系統(tǒng),相對于第一分布式存儲子系統(tǒng)可以被所有數(shù)據(jù)節(jié)點共享,某個數(shù)據(jù)節(jié)點對應的分布式存儲子系統(tǒng)只有該數(shù)據(jù)節(jié)點本身具有讀寫權(quán)限。
基于上述文件存儲系統(tǒng),本發(fā)明實施例提供了一種數(shù)據(jù)調(diào)度方法,如圖3所述,該方法包括:
301:主數(shù)據(jù)節(jié)點接收客戶端發(fā)送的寫操作指令。
其中,所述寫操作指令中包括待寫入數(shù)據(jù)。
302:主數(shù)據(jù)節(jié)點將所述待寫入數(shù)據(jù)寫入第一分布式存儲子系統(tǒng)中。
在本步驟的具體實現(xiàn)過程中,主數(shù)據(jù)節(jié)點接收到待寫入數(shù)據(jù)后,將待寫入數(shù)據(jù)轉(zhuǎn)發(fā)到分布式存儲子系統(tǒng)內(nèi)部,觸發(fā)分布式存儲子系統(tǒng)的寫操作流程,分布式存儲子系統(tǒng)將待寫入數(shù)據(jù)寫到主物理磁盤,同時發(fā)送復制請求給備份磁盤,備份磁盤再復制主物理磁盤的數(shù)據(jù)并保存,實現(xiàn)備份磁盤與主物理磁盤之間的數(shù)據(jù)的備份。
303:主數(shù)據(jù)節(jié)點向名字節(jié)點發(fā)送通知消息,向客戶端發(fā)送應答消息。
當主數(shù)據(jù)節(jié)點成功將數(shù)據(jù)寫入分布式存儲子系統(tǒng)后,表明寫完數(shù)據(jù),則該主數(shù)據(jù)節(jié)點向名字節(jié)點發(fā)送通知消息以告知名字節(jié)點已經(jīng)寫完待寫 入數(shù)據(jù),并向客戶端發(fā)送應答消息以告知客戶端已經(jīng)根據(jù)客戶端發(fā)送的命令完成數(shù)據(jù)的寫入。
304:主數(shù)據(jù)節(jié)點向第一備份數(shù)據(jù)節(jié)點發(fā)送更新請求。
這是本發(fā)明實施例提供的數(shù)據(jù)調(diào)度方法與現(xiàn)有技術(shù)的一個不同之處。現(xiàn)有技術(shù)中,主數(shù)據(jù)節(jié)點將數(shù)據(jù)寫入分布式存儲系統(tǒng)中后,會向第一備份數(shù)據(jù)節(jié)點發(fā)送寫請求,該寫請求中攜帶有待寫入數(shù)據(jù),第一備份數(shù)據(jù)節(jié)點收到該寫請求后需要將該請求中攜帶的待寫入數(shù)據(jù)寫入到其自身對應的一個獨立的分布式存儲子系統(tǒng)中,這樣才算完成了第一備份數(shù)據(jù)節(jié)點的寫數(shù)據(jù)過程。
而在本發(fā)明中,該更新請求僅包括待寫入數(shù)據(jù)在第一分布式存儲子系統(tǒng)中的存儲位置和待寫入數(shù)據(jù)的屬性信息,例如:待寫入數(shù)據(jù)的名稱以及大小等。更新請求中包含的信息相當于待寫入數(shù)據(jù)的索引信息,并不包括待寫入數(shù)據(jù)本身。這樣,第一備份數(shù)據(jù)節(jié)點根據(jù)該更新請求可以從相應的位置查找到待寫入數(shù)據(jù)即可,省去了主數(shù)據(jù)節(jié)點與第一備份數(shù)據(jù)節(jié)點之間的數(shù)據(jù)傳輸?shù)倪^程,以及第一備份數(shù)據(jù)節(jié)點將待寫入數(shù)據(jù)進行寫的整個過程。
305:備份數(shù)據(jù)節(jié)點接收更新請求。
其中,所述更新請求包括所述待寫入數(shù)據(jù)在所述第一分布式存儲子系統(tǒng)中的存儲位置和所述待寫入數(shù)據(jù)的屬性信息。
本步驟中所指的備份數(shù)據(jù)節(jié)點包括前述步驟中所指的第一備份數(shù)據(jù)節(jié)點。
如果需要將待寫入數(shù)據(jù)在2個數(shù)據(jù)節(jié)點之間實現(xiàn)備份,則文件存儲系統(tǒng)中僅包括主數(shù)據(jù)節(jié)點和第一備份數(shù)據(jù)節(jié)點。
如果需要將待寫入數(shù)據(jù)在2個以上的數(shù)據(jù)節(jié)點之間實現(xiàn)備份(一般為在3個數(shù)據(jù)節(jié)點之間實現(xiàn)備份),則文件存儲系統(tǒng)中除了主數(shù)據(jù)節(jié)點和第一備份數(shù)據(jù)節(jié)點外,可能還包括第二備份數(shù)據(jù)節(jié)點、第三備份數(shù)據(jù)節(jié)點等。這種情況下,采用流水處理的過程,前一數(shù)據(jù)節(jié)點寫完后,向后一數(shù)據(jù)節(jié)點發(fā)送更新請求。例如:主數(shù)據(jù)節(jié)點將待寫入數(shù)據(jù)寫入分布式存儲系統(tǒng)中后,向第一備份數(shù)據(jù)節(jié)點發(fā)送更新請求;第一備份數(shù)據(jù)節(jié)點完成數(shù)據(jù)寫入后,向第二備份數(shù)據(jù)節(jié)點發(fā)送更新請求,依此類推。
306:備份數(shù)據(jù)節(jié)點根據(jù)待寫入數(shù)據(jù)在第一分布式存儲子系統(tǒng)中的存儲位置以及待寫入數(shù)據(jù)的屬性信息,在第一分布式存儲子系統(tǒng)中查找所述待寫入數(shù)據(jù)。
307:當查找到待寫入數(shù)據(jù)時,備份數(shù)據(jù)節(jié)點保存所述待寫入數(shù)據(jù)的屬性信息。
308:備份數(shù)據(jù)節(jié)點向名字節(jié)點發(fā)送通知消息,向客戶端發(fā)送應答消息。
備份數(shù)據(jù)節(jié)點僅需要保存待寫入數(shù)據(jù)的屬性信息,便完成了對待寫入數(shù)據(jù)的寫入過程。當備份數(shù)據(jù)節(jié)點完成數(shù)據(jù)寫入后,向名字節(jié)點發(fā)送通知消息,向客戶端發(fā)送應答消息。
需要說明的是,圖3中僅示出了文件存儲系統(tǒng)中包括主數(shù)據(jù)節(jié)點和第一備份數(shù)據(jù)節(jié)點的時候,數(shù)據(jù)調(diào)度的具體實現(xiàn)過程;當文件存儲系統(tǒng)中還包括其他備份數(shù)據(jù)節(jié)點時,其余備份數(shù)據(jù)節(jié)點的操作過程同第一備份數(shù)據(jù)節(jié)點,圖3中并未示出。
本發(fā)明實施例提供的文件存儲系統(tǒng),多個數(shù)據(jù)節(jié)點共享一個分布式存儲子系統(tǒng),且該分布式存儲子系統(tǒng)包括一個主存儲設(shè)備和至少一個備份存儲設(shè)備,能夠?qū)崿F(xiàn)數(shù)據(jù)在各個存儲設(shè)備之間的互相備份。在利用該文件存儲系統(tǒng)進行寫數(shù)據(jù)時,主數(shù)據(jù)節(jié)點將待寫入數(shù)據(jù)寫入第一分布式存儲子系統(tǒng),然后向第一備份數(shù)據(jù)節(jié)點發(fā)送更新請求以通知第一備份數(shù)據(jù)節(jié)點待寫入數(shù)據(jù)的屬性信息以及待寫入數(shù)據(jù)的存儲位置,第一備份數(shù)據(jù)節(jié)點根據(jù)該更新請求僅需要查看第一分布式存儲子系統(tǒng),確定第一分布式存儲子系統(tǒng)中已經(jīng)寫入了待寫入數(shù)據(jù)后,保存更新請求中的待寫入數(shù)據(jù)的屬性信息,便完成了對待寫入數(shù)據(jù)的寫過程。與現(xiàn)有技術(shù)中,所有數(shù)據(jù)節(jié)點都需要將待寫入數(shù)據(jù)分別寫入其對應的分布式存儲系統(tǒng)相比,這樣本發(fā)明提供的數(shù)據(jù)調(diào)度的方法,雖然存在多個數(shù)據(jù)節(jié)點,但實際只有一個數(shù)據(jù)節(jié)點進行了數(shù)據(jù)寫入第一分布式操作系統(tǒng)的過程,其余數(shù)據(jù)節(jié)點則利用數(shù)據(jù)本地化特性,查看共享的分布式存儲子系統(tǒng),能夠減少數(shù)據(jù)在各個數(shù)據(jù)節(jié)點之間的網(wǎng)絡傳輸和存儲時間,進而加快數(shù)據(jù)寫入速度。
此外,現(xiàn)有技術(shù)中,當需要通過多個數(shù)據(jù)節(jié)點實現(xiàn)數(shù)據(jù)備份時,待寫入數(shù)據(jù)除了需要在多個數(shù)據(jù)節(jié)點之間進行傳輸;分布式存儲子系統(tǒng)內(nèi)部也 要實現(xiàn)數(shù)據(jù)備份,因而數(shù)據(jù)還要在分布式存儲子系統(tǒng)內(nèi)部的多個存儲設(shè)備之間進行傳輸,因而容易帶來網(wǎng)絡熱點問題,造成網(wǎng)絡瓶頸。且每個數(shù)據(jù)節(jié)點都要讀取全部待寫入數(shù)據(jù)并保存,占用的存儲空間較大,進而帶來較大的存儲開銷。
而本發(fā)明實施例中,盡管存在多個互相備份的數(shù)據(jù)節(jié)點,但實際上只有一個數(shù)據(jù)節(jié)點進行了真正的寫數(shù)據(jù)的過程,其余數(shù)據(jù)節(jié)點僅僅是利用數(shù)據(jù)本地化特性,通過共享的分布式存儲系統(tǒng)實現(xiàn)本地請求數(shù)據(jù),能夠減少各個數(shù)據(jù)節(jié)點之間傳輸?shù)臄?shù)據(jù)量,減少傳輸開銷;此外,由于僅由第一個數(shù)據(jù)節(jié)點進行了待寫入數(shù)據(jù)的讀寫并將待寫入數(shù)據(jù)保存在第一分布式存儲系統(tǒng)中,其余數(shù)據(jù)節(jié)點無需再保存待寫入數(shù)據(jù),因此還能夠減少占用的存儲空間,進而節(jié)省服務器群的存儲開銷。
結(jié)合實際應用,本發(fā)明實施例還提供了一個數(shù)據(jù)調(diào)度的具體實現(xiàn)過程,如圖4所示,包括:
401:客戶端的DistributedFileSystem模塊向名字節(jié)點發(fā)起RPC請求。
所述遠程過程調(diào)用協(xié)議(Remote Procedure Call Protocol,RPC)請求,用于在文件系統(tǒng)的命名空間中創(chuàng)建一個新的文件。
402:名字節(jié)點接收到RPC請求后,創(chuàng)建新文件。
需要說明的是,在執(zhí)行本步驟之前,名字節(jié)點首先檢查要創(chuàng)建的文件是否已經(jīng)存在,創(chuàng)建者是否有權(quán)限進行操作,如果不存在要創(chuàng)建的文件且創(chuàng)建者有權(quán)限進行操作,才會執(zhí)行本步驟以及后續(xù)步驟;否則會讓客戶端拋出異常,結(jié)束文件讀寫的過程。
下述步驟403至步驟407為數(shù)據(jù)寫入過程。
403:客戶端的DFSOutputStream模塊將數(shù)據(jù)分成塊,寫入數(shù)據(jù)隊列(data queue)中,并通知名字節(jié)點分配數(shù)據(jù)節(jié)點。
其中,Data queue由DFSOutputStream模塊中的Data Streamer子模塊讀取。數(shù)據(jù)節(jié)點用來存儲數(shù)據(jù)塊,分配的數(shù)據(jù)節(jié)點放在一個管道(pipeline)里。
404:客戶端的Data Streamer子模塊將數(shù)據(jù)塊寫入pipeline中的主數(shù)據(jù)節(jié)點。
其中,該主數(shù)據(jù)節(jié)點為pipeline中的第一個數(shù)據(jù)節(jié)點。
與此同時,客戶端的DFSOutputStream模塊為發(fā)出去的數(shù)據(jù)塊保存了ack queue,等待pipeline中的每個數(shù)據(jù)節(jié)點告知數(shù)據(jù)已經(jīng)寫入成功。
405:主數(shù)據(jù)節(jié)點觸發(fā)分布式存儲子系統(tǒng)的寫流程。
在該步驟的具體實現(xiàn)過程中,首先將數(shù)據(jù)寫到主物理磁盤,同時發(fā)送復制請求給備磁盤,實現(xiàn)分布式存儲設(shè)備上多備份數(shù)據(jù)(默認復制3份)寫入。
406:主數(shù)據(jù)節(jié)點將數(shù)據(jù)寫入分布式存儲子系統(tǒng)中后,向名字節(jié)點發(fā)送通知消息,向客戶端發(fā)送應答消息,向備份數(shù)據(jù)節(jié)點發(fā)送更新請求。
在本步驟的具體實現(xiàn)過程中,主數(shù)據(jù)節(jié)點不再需要向備份數(shù)據(jù)節(jié)點發(fā)送數(shù)據(jù)塊,而只是發(fā)送更新請求,由此進入“更新層”的處理過程。
需要說明的是,本步驟中所指的備份數(shù)據(jù)節(jié)點為第一備份數(shù)據(jù)節(jié)點,圖4中還示出了第二備份數(shù)據(jù)節(jié)點,則第一備份數(shù)據(jù)節(jié)點在完成數(shù)據(jù)的寫入操作后,還要向第二備份數(shù)據(jù)節(jié)點發(fā)送更新請求。
還需要說明的是,除了下述步驟的處理過程以外,更新層還可以包括其他處理過程。
407:備份數(shù)據(jù)節(jié)點收到更新請求后,根據(jù)更新請求中的消息內(nèi)容刷新共享的分布式存儲子系統(tǒng),當讀取到數(shù)據(jù)塊的信息時,保存數(shù)據(jù)塊的屬性信息等,即完成數(shù)據(jù)塊的寫入過程,當完成數(shù)據(jù)塊的寫入后,向名字節(jié)點發(fā)送通知消息,向客戶端返回響應消息。
當pipeline中的所有數(shù)據(jù)節(jié)點都完成數(shù)據(jù)的寫入,akc quene把對應的數(shù)據(jù)包移除掉。
重復上述過程,Data Streamer把剩余的數(shù)據(jù)包都刷到pipeline里然后等待ack信息,收到最后一個ack后,通知元數(shù)據(jù)節(jié)點寫入完畢。
當客戶端完成所有數(shù)據(jù)塊的寫入操作后,調(diào)用stream的close方法關(guān)閉寫入流。
作為數(shù)據(jù)調(diào)度方法的具體應用,如圖5所示,本發(fā)明實施例提供了一種數(shù)據(jù)節(jié)點,包括:
接收模塊501,用于接收客戶端發(fā)送的寫操作指令,所述寫操作指令中包括待寫入數(shù)據(jù)。
寫電路502,用于將所述待寫入數(shù)據(jù)寫入第一分布式存儲子系統(tǒng)中;
發(fā)送模塊503,用于向名字節(jié)點發(fā)送通知消息,向客戶端發(fā)送應答消息;
向第一備份數(shù)據(jù)節(jié)點發(fā)送更新請求,所述更新請求包括所述待寫入數(shù)據(jù)在所述第一分布式存儲子系統(tǒng)中的存儲位置和所述待寫入數(shù)據(jù)的屬性信息。
其中,所述待寫入數(shù)據(jù)的屬性信息包括所述待寫入數(shù)據(jù)的名稱以及大小。
本發(fā)明實施例還提供了一種數(shù)據(jù)節(jié)點,如圖6所示,包括:
接收模塊601,用于接收更新請求,所述更新請求包括所述待寫入數(shù)據(jù)在所述第一分布式存儲子系統(tǒng)中的存儲位置和所述待寫入數(shù)據(jù)的屬性信息。
處理模塊602,用于根據(jù)所述待寫入數(shù)據(jù)在所述第一分布式存儲子系統(tǒng)中的存儲位置以及所述待寫入數(shù)據(jù)的屬性信息,在所述第一分布式存儲子系統(tǒng)中查找所述待寫入數(shù)據(jù)。
存儲模塊603,用于當查找到所述待寫入數(shù)據(jù)時,所述備份數(shù)據(jù)節(jié)點保存所述待寫入數(shù)據(jù)的屬性信息。
發(fā)送模塊604,用于向名字節(jié)點發(fā)送通知消息,向客戶端發(fā)送應答消息。
本發(fā)明實施例提供的文件存儲系統(tǒng),多個數(shù)據(jù)節(jié)點共享一個分布式存儲子系統(tǒng),且該分布式存儲子系統(tǒng)包括一個主存儲設(shè)備和至少一個備份存儲設(shè)備,能夠?qū)崿F(xiàn)數(shù)據(jù)在各個存儲設(shè)備之間的互相備份。在利用該文件存儲系統(tǒng)進行寫數(shù)據(jù)時,主數(shù)據(jù)節(jié)點將待寫入數(shù)據(jù)寫入第一分布式存儲子系統(tǒng),然后向第一備份數(shù)據(jù)節(jié)點發(fā)送更新請求以通知第一備份數(shù)據(jù)節(jié)點待寫入數(shù)據(jù)的屬性信息以及待寫入數(shù)據(jù)的存儲位置,第一備份數(shù)據(jù)節(jié)點根據(jù)該更新請求僅需要查看第一分布式存儲子系統(tǒng),確定第一分布式存儲子系統(tǒng)中已經(jīng)寫入了待寫入數(shù)據(jù)后,保存更新請求中的待寫入數(shù)據(jù)的屬性信息,便完成了對待寫入數(shù)據(jù)的寫過程。與現(xiàn)有技術(shù)中,所有數(shù)據(jù)節(jié)點都需要將待寫入數(shù)據(jù)分別寫入其對應的分布式存儲系統(tǒng)相比,這樣本發(fā)明提供的數(shù)據(jù)調(diào)度的方法,雖然存在多個數(shù)據(jù)節(jié)點,但實際只有一個數(shù)據(jù)節(jié)點進行了 數(shù)據(jù)寫入第一分布式操作系統(tǒng)的過程,其余數(shù)據(jù)節(jié)點則利用數(shù)據(jù)本地化特性,查看共享的分布式存儲子系統(tǒng),能夠減少數(shù)據(jù)在各個數(shù)據(jù)節(jié)點之間的網(wǎng)絡傳輸和存儲時間,進而加快數(shù)據(jù)寫入速度。
通過以上的實施方式的描述,所屬領(lǐng)域的技術(shù)人員可以清楚地了解到本發(fā)明可借助軟件加必需的通用硬件的方式來實現(xiàn),當然也可以通過硬件,但很多情況下前者是更佳的實施方式。基于這樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在可讀取的存儲介質(zhì)中,如計算機的軟盤,硬盤或光盤等,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務器,或者網(wǎng)絡設(shè)備等)執(zhí)行本發(fā)明各個實施例所述的方法。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應涵蓋在本發(fā)明的保護范圍之內(nèi)。