一種基于hdfs的文件存儲(chǔ)方法、裝置及分布式文件系統(tǒng)的制作方法
【專利摘要】本發(fā)明提供了一種基于HDFS的文件存儲(chǔ)方法,響應(yīng)于來自客戶端的文件存儲(chǔ)請求將文件分成多個(gè)數(shù)據(jù)塊并存儲(chǔ)到HDFS的數(shù)據(jù)節(jié)點(diǎn)的存儲(chǔ)器中,所述方法包括:剩余空間獲取步驟,獲取存儲(chǔ)器的剩余存儲(chǔ)空間;數(shù)據(jù)節(jié)點(diǎn)選擇步驟,為所述多個(gè)數(shù)據(jù)塊選擇數(shù)據(jù)節(jié)點(diǎn);存儲(chǔ)器選擇步驟,從被選擇的數(shù)據(jù)節(jié)點(diǎn)的多個(gè)存儲(chǔ)器中為每個(gè)數(shù)據(jù)塊選擇存儲(chǔ)器來存儲(chǔ)所述數(shù)據(jù)塊;其中所述存儲(chǔ)器選擇步驟包括按照基于存儲(chǔ)器的剩余存儲(chǔ)空間的預(yù)置規(guī)則,為每個(gè)數(shù)據(jù)塊選擇存儲(chǔ)器作為存儲(chǔ)該數(shù)據(jù)塊的目標(biāo)存儲(chǔ)器。本發(fā)明還提供了一種基于HDFS的文件存儲(chǔ)控制裝置和一種HDFS分布式文件系統(tǒng)。
【專利說明】一種基于HDFS的文件存儲(chǔ)方法、裝置及分布式文件系統(tǒng)
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及海量數(shù)據(jù)存儲(chǔ)領(lǐng)域,特別是涉及一種基于分布式文件系統(tǒng)的文件存儲(chǔ)方法和裝置。
【背景技術(shù)】
[0002]隨著科學(xué)技術(shù)的不斷發(fā)展,海量數(shù)據(jù)時(shí)代已經(jīng)到來。谷歌、亞馬遜、IBM和微軟等國際大公司在此領(lǐng)域投入了大量的科研力量,提出了多種創(chuàng)新的海量數(shù)據(jù)管理技術(shù)。這些研究工作主要集中在存儲(chǔ)層、計(jì)算層和接口層這3個(gè)層次,圖1示出了海量數(shù)據(jù)處理技術(shù)涉及的相關(guān)層次。其中,以谷歌公司提出的分布式文件系統(tǒng)GFS、并行編程框架MapReduce為代表的技術(shù)成為海量數(shù)據(jù)存儲(chǔ)與分析處理的主流技術(shù)?;贕FS和MapReduce的設(shè)計(jì)思想,開源社區(qū)Apache的Hadoop項(xiàng)目實(shí)現(xiàn)了 Hadoop分布式文件系統(tǒng)(Hadoop DFS,簡稱HDFS)和并行編程框架Hadoop MapReduce。目前,Hadoop廣泛地應(yīng)用在雅虎、臉譜等互聯(lián)網(wǎng)公司的海量數(shù)據(jù)存儲(chǔ)與分析應(yīng)用中。
[0003]存儲(chǔ)層用于提供對數(shù)據(jù)的存儲(chǔ)與訪問服務(wù),其為海量數(shù)據(jù)存儲(chǔ)與處理方面的關(guān)鍵一環(huán),其余各個(gè)層次均依賴于存儲(chǔ)層。目前最常用的存儲(chǔ)層軟件是HDFS分布式文件系統(tǒng),其結(jié)構(gòu)如圖2所示。
[0004]HDFS包含三個(gè)重要角色:名稱節(jié)點(diǎn)(NameNode)、數(shù)據(jù)節(jié)點(diǎn)(DataNode)以及客戶端(Client)。名稱節(jié)點(diǎn)是分布式文件系統(tǒng)中的核心管理者,主要負(fù)責(zé)管理命名空間、節(jié)點(diǎn)的配置信息管理、缺失數(shù)據(jù)塊的復(fù)制等多種功能。名稱節(jié)點(diǎn)作為主控節(jié)點(diǎn)會(huì)將文件系統(tǒng)的元數(shù)據(jù)(Meta-data)存儲(chǔ)在其內(nèi)存空間之中,這些元數(shù)據(jù)主要包括了文件信息、每一個(gè)文件都有哪些數(shù)據(jù)塊等信息。 數(shù)據(jù)節(jié)點(diǎn)是分布式文件系統(tǒng)負(fù)責(zé)存儲(chǔ)的基本單元,分布式集群中的數(shù)據(jù)節(jié)點(diǎn)通常是每個(gè)節(jié)點(diǎn)一個(gè),并且一個(gè)文件被分成多個(gè)數(shù)據(jù)塊,數(shù)據(jù)節(jié)點(diǎn)負(fù)責(zé)管理自己所在節(jié)點(diǎn)上的這些數(shù)據(jù)塊的存儲(chǔ)和處理客戶端發(fā)來的讀寫請求,并在名稱節(jié)點(diǎn)的控制之下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、復(fù)制等操作。同時(shí)周期性地將所有管理的數(shù)據(jù)塊信息發(fā)送給名稱節(jié)點(diǎn)。客戶端可以看作是獲取分布式文件系統(tǒng)文件的應(yīng)用程序。另外,還存在一個(gè)次級名稱節(jié)點(diǎn)(Secondary NameNode)用于備份(或者更新)文件系統(tǒng)的元數(shù)據(jù)信息。
[0005]單個(gè)名稱節(jié)點(diǎn)會(huì)管理多個(gè)數(shù)據(jù)節(jié)點(diǎn),數(shù)據(jù)節(jié)點(diǎn)通常會(huì)使用多個(gè)磁盤用于數(shù)據(jù)塊的存儲(chǔ)。因此當(dāng)數(shù)據(jù)需要被載入系統(tǒng)中時(shí),需要對數(shù)據(jù)的存放節(jié)點(diǎn),以及使用哪個(gè)磁盤存儲(chǔ)進(jìn)行選擇。因此目前HDFS的數(shù)據(jù)存儲(chǔ)調(diào)度包含兩層。首先是名稱節(jié)點(diǎn)選擇數(shù)據(jù)節(jié)點(diǎn),其次是從選擇出來的數(shù)據(jù)節(jié)點(diǎn)選擇具體的磁盤用于數(shù)據(jù)塊存儲(chǔ)。HDFS的管理者可以通過在hdfs.xml中配置dfs.data, dir參數(shù)來進(jìn)行設(shè)置:
[0006]
<property>
<naine>dfs.data.dir</name>
< value〉/disk I, /disl<2, /disk3, /disk4</value>
〈/property〉[0007]第一層次是節(jié)點(diǎn)選擇,目前HDFS主要采用的是一種稱為機(jī)架感知的調(diào)度算法。該算法以節(jié)點(diǎn)在機(jī)架的位置作為選擇的依據(jù)。第二個(gè)層次是磁盤級調(diào)度。目前HDFS采用的是輪轉(zhuǎn)(Round-Robin)調(diào)度。該算法以輪轉(zhuǎn)的方式將數(shù)據(jù)塊調(diào)度在多個(gè)磁盤上。輪轉(zhuǎn)調(diào)度的優(yōu)點(diǎn)是其簡潔性,它無需記錄當(dāng)前各磁盤狀態(tài)。但該算法完全不考慮不同磁盤間的差異,因而在異構(gòu)(磁盤容量不一)狀態(tài)下,容易導(dǎo)致某些磁盤占用率相當(dāng)高,而另一些大容量磁盤的空間大量閑置,使得磁盤利用不均。如同一個(gè)節(jié)點(diǎn)磁盤a的利用率已接近100%,磁盤b的利用率卻可能僅為10%。即使在同構(gòu)狀態(tài)下,當(dāng)負(fù)載很高且節(jié)點(diǎn)更換或加入新磁盤時(shí),新磁盤的利用率也將遠(yuǎn)低于丨H有磁盤,使得大量I/0操作仍集中于舊有磁盤。
[0008]因此,如何優(yōu)化文件系統(tǒng)的負(fù)載,提升負(fù)載的均衡性成為了目前重要的需求。
【發(fā)明內(nèi)容】
[0009]鑒于上述問題,提出了本發(fā)明以便提供一種克服上述問題或者至少部分地解決上述問題的文件存儲(chǔ)方法、裝置及分布式文件系統(tǒng)。
[0010]根據(jù)本發(fā)明一方面,提供一種基于HDFS的文件存儲(chǔ)方法,響應(yīng)于來自客戶端的文件存儲(chǔ)請求將文件分成多個(gè)數(shù)據(jù)塊并存儲(chǔ)到HDFS的數(shù)據(jù)節(jié)點(diǎn)的存儲(chǔ)器中,所述方法包括:
[0011]剩余空間獲取步驟,獲取存儲(chǔ)器的剩余存儲(chǔ)空間;
[0012]數(shù)據(jù)節(jié)點(diǎn)選擇步驟,為所述多個(gè)數(shù)據(jù)塊選擇數(shù)據(jù)節(jié)點(diǎn);
[0013]存儲(chǔ)器選擇步驟,從被選擇的數(shù)據(jù)節(jié)點(diǎn)的多個(gè)存儲(chǔ)器D1, D2,彳0?為每個(gè)數(shù)據(jù)塊選擇存儲(chǔ)器來存儲(chǔ)所述數(shù)據(jù)塊;
[0014]其中所述存儲(chǔ)器選擇步驟包括:按照基于存儲(chǔ)器的剩余存儲(chǔ)空間的預(yù)置規(guī)則,為每個(gè)數(shù)據(jù)塊選擇存儲(chǔ)器作為存儲(chǔ)該數(shù)據(jù)塊的目標(biāo)存儲(chǔ)器。
[0015]可選地,所述基于存儲(chǔ)器的剩余存儲(chǔ)空間的預(yù)置規(guī)則包括,基于概率調(diào)度法為每個(gè)數(shù)據(jù)塊選擇目標(biāo)存儲(chǔ)器,其中每個(gè)存儲(chǔ)器被選擇為目標(biāo)存儲(chǔ)器的概率為每個(gè)存儲(chǔ)器的剩余存儲(chǔ)空間占所述多個(gè)存儲(chǔ)器的總剩余存儲(chǔ)空間的比例。
[0016]可選地,所述基于存儲(chǔ)器的剩余存儲(chǔ)空間的預(yù)置規(guī)則包括,在每個(gè)存儲(chǔ)器的剩余存儲(chǔ)空間大于特定閾值時(shí),基于輪轉(zhuǎn)調(diào)度法為每個(gè)數(shù)據(jù)塊依次地選擇目標(biāo)存儲(chǔ)器;在任一存儲(chǔ)器的剩余存儲(chǔ)空間等于或小于特定閾值時(shí),基于概率調(diào)度法為每個(gè)數(shù)據(jù)塊選擇目標(biāo)存儲(chǔ)器,其中每個(gè)存儲(chǔ)器被選擇為目標(biāo)存儲(chǔ)器的概率為每個(gè)存儲(chǔ)器的剩余存儲(chǔ)空間占所述多個(gè)存儲(chǔ)器的總剩余存儲(chǔ)空間的比例。
[0017]可選地,所述概率調(diào)度法包括:根據(jù)存儲(chǔ)器Di的剩余存儲(chǔ)空間Ci為每個(gè)存儲(chǔ)器分配管理區(qū)間,其中,當(dāng)i=l時(shí),Di的管理區(qū)間為[O, C1-1];且當(dāng)i=2,…η時(shí),Di的管理區(qū)間
為
【權(quán)利要求】
1.一種基于HDFS的文件存儲(chǔ)方法,響應(yīng)于來自客戶端的文件存儲(chǔ)請求將文件分成多個(gè)數(shù)據(jù)塊并存儲(chǔ)到HDFS的數(shù)據(jù)節(jié)點(diǎn)的存儲(chǔ)器中,所述方法包括: 剩余空間獲取步驟,獲取存儲(chǔ)器的剩余存儲(chǔ)空間; 數(shù)據(jù)節(jié)點(diǎn)選擇步驟,為所述多個(gè)數(shù)據(jù)塊選擇數(shù)據(jù)節(jié)點(diǎn); 存儲(chǔ)器選擇步驟,從被選擇的數(shù)據(jù)節(jié)點(diǎn)的多個(gè)存儲(chǔ)器(D1, D2,彳0?)中為每個(gè)數(shù)據(jù)塊選擇存儲(chǔ)器來存儲(chǔ)所述數(shù)據(jù)塊; 其中所述存儲(chǔ)器選擇步驟包括 按照基于存儲(chǔ)器的剩余存儲(chǔ)空間的預(yù)置規(guī)則,為每個(gè)數(shù)據(jù)塊選擇存儲(chǔ)器作為存儲(chǔ)該數(shù)據(jù)塊的目標(biāo)存儲(chǔ)器。
2.根據(jù)權(quán)利要求1所述的文件存儲(chǔ)方法,其中所述基于存儲(chǔ)器的剩余存儲(chǔ)空間的預(yù)置規(guī)則包括 基于概率調(diào)度法為每個(gè)數(shù)據(jù)塊選擇目標(biāo)存儲(chǔ)器,其中每個(gè)存儲(chǔ)器被選擇為目標(biāo)存儲(chǔ)器的概率為每個(gè)存儲(chǔ)器的剩余存儲(chǔ)空間占所述多個(gè)存儲(chǔ)器的總剩余存儲(chǔ)空間的比例。
3.根據(jù)權(quán)利要求1所述的文件存儲(chǔ)方法,其中所述基于存儲(chǔ)器的剩余存儲(chǔ)空間的預(yù)置規(guī)則包括 在每個(gè)存儲(chǔ)器(D1, D2,…,或Dn)的剩余存儲(chǔ)空間大于特定閾值時(shí),基于輪轉(zhuǎn)調(diào)度法為每個(gè)數(shù)據(jù)塊依次地選擇目標(biāo)存儲(chǔ)器; 在任一存儲(chǔ)器(D1, D2,…,或Dn)的剩余存儲(chǔ)空間等于或小于特定閾值時(shí),基于概率調(diào)度法為每個(gè)數(shù)據(jù)塊選擇目標(biāo)存儲(chǔ).器,其中每個(gè)存儲(chǔ)器被選擇為目標(biāo)存儲(chǔ)器的概率為每個(gè)存儲(chǔ)器的剩余存儲(chǔ)空間占所述多個(gè)存儲(chǔ)器的總剩余存儲(chǔ)空間的比例。
4.根據(jù)權(quán)利要求2或3所述的文件存儲(chǔ)方法,其中所述概率調(diào)度法包括: 根據(jù)存儲(chǔ)器Di的剩余存儲(chǔ)空間Ci為每個(gè)存儲(chǔ)器分配管理區(qū)間,其中,當(dāng)i=l時(shí),Di的管
卜II理區(qū)間為[0,C「1];且當(dāng)i=2,...!!時(shí),Di的管理區(qū)間為ΙΣ(_ν,Σ〔ν -!];
Iι~\ 對要存儲(chǔ)的一數(shù)據(jù)塊,取隨機(jī)數(shù)X并對總剩余存儲(chǔ)空間取模以得到1,即
ηy=.χ mod.^Ci ;
1-1 如y落入為存儲(chǔ)器Di的管理區(qū)間,則為要存儲(chǔ)的所述數(shù)據(jù)塊選擇存儲(chǔ)器Di作為目標(biāo)存儲(chǔ)器。
5.根據(jù)權(quán)利要求4所述的文件存儲(chǔ)方法,其中X為隨機(jī)的自然數(shù)。
6.一種用于HDFS的文件存儲(chǔ)控制裝置,響應(yīng)于來自客戶端裝置的文件存儲(chǔ)請求將文件分成多個(gè)數(shù)據(jù)塊并存儲(chǔ)到HDFS的數(shù)據(jù)節(jié)點(diǎn)裝置的存儲(chǔ)器中,其中所述文件存儲(chǔ)控制裝置包括 剩余空間獲取元件,適于獲取存儲(chǔ)器的剩余存儲(chǔ)空間; 數(shù)據(jù)節(jié)點(diǎn)選擇元件,適于為所述多個(gè)數(shù)據(jù)塊選擇數(shù)據(jù)節(jié)點(diǎn)裝置; 存儲(chǔ)器選擇元件,適于從被選擇的數(shù)據(jù)節(jié)點(diǎn)裝置的多個(gè)存儲(chǔ)器(D1, D2,彳0?)中為每個(gè)數(shù)據(jù)塊選擇存儲(chǔ)器來存儲(chǔ)所述數(shù)據(jù)塊; 其中所述存儲(chǔ)器選擇元件還適于按照基于存儲(chǔ)器的剩余存儲(chǔ)空間的預(yù)置規(guī)則,為每個(gè)數(shù)據(jù)塊選擇存儲(chǔ)器作為存儲(chǔ)該數(shù)據(jù)塊的目標(biāo)存儲(chǔ)器。
7.根據(jù)權(quán)利要求6所述的文件存儲(chǔ)控制裝置,其中所述基于存儲(chǔ)器的剩余存儲(chǔ)空間的預(yù)置規(guī)則包括 基于概率調(diào)度法為每個(gè)數(shù)據(jù)塊選擇目標(biāo)存儲(chǔ)器,其中每個(gè)存儲(chǔ)器被選擇為目標(biāo)存儲(chǔ)器的概率為每個(gè)存儲(chǔ)器的剩余存儲(chǔ)空間占所述多個(gè)存儲(chǔ)器的總剩余存儲(chǔ)空間的比例。
8.根據(jù)權(quán)利要求6所述的文件存儲(chǔ)控制裝置,其中所述基于存儲(chǔ)器的剩余存儲(chǔ)空間的預(yù)置規(guī)則包括 在每個(gè)存儲(chǔ)器(D1, D2,…,或Dn)的剩余存儲(chǔ)空間大于特定閾值時(shí),基于輪轉(zhuǎn)調(diào)度法為每個(gè)數(shù)據(jù)塊依次地選擇目標(biāo)存儲(chǔ)器; 在任一存儲(chǔ)器(D1, D2,…,或Dn)的剩余存儲(chǔ)空間等于或小于特定閾值時(shí),基于概率調(diào)度法為每個(gè)數(shù)據(jù)塊選擇目標(biāo)存儲(chǔ)器,其中每個(gè)存儲(chǔ)器被選擇為目標(biāo)存儲(chǔ)器的概率為每個(gè)存儲(chǔ)器的剩余存儲(chǔ)空間占所述多個(gè)存儲(chǔ)器的總剩余存儲(chǔ)空間的比例。
9.根據(jù)權(quán)利要求7或8所述的文件存儲(chǔ)控制裝置,其中所述概率調(diào)度法包括: 根據(jù)存儲(chǔ)器Di的剩余存儲(chǔ)空間Ci為每個(gè)存儲(chǔ)器分配管理區(qū)間,其中,當(dāng)i=l時(shí),Di的管理區(qū)間為[0,C「1];且當(dāng)i=2,...!!時(shí),Di的管理區(qū)間為 對要存儲(chǔ)的一數(shù)據(jù)塊,取隨機(jī)數(shù)X并對總剩余存儲(chǔ)空間取模以得到1,即 如I落入為存儲(chǔ)器Di的管理區(qū)間,則為要存儲(chǔ)的所述數(shù)據(jù)塊選擇存儲(chǔ)器Di作為目標(biāo)存儲(chǔ)器。
10.一種Hadoop分布式文件系統(tǒng),包括如權(quán)利要求6_9之任一所述的文件存儲(chǔ)控制裝置、以及數(shù)據(jù)節(jié)點(diǎn)裝置和客戶端裝置,所述文件存儲(chǔ)控制裝置響應(yīng)于來自客戶端裝置的文件存儲(chǔ)請求將文件分成多個(gè)數(shù)據(jù)塊并存儲(chǔ)到數(shù)據(jù)節(jié)點(diǎn)裝置包含的存儲(chǔ)器中。
【文檔編號(hào)】G06F17/30GK103473365SQ201310450388
【公開日】2013年12月25日 申請日期:2013年9月25日 優(yōu)先權(quán)日:2013年9月25日
【發(fā)明者】趙彥榮, 郭東東, 趙健博 申請人:北京奇虎科技有限公司, 奇智軟件(北京)有限公司