陳 偉
(宿州職業(yè)技術(shù)學(xué)院計算機系,安徽宿州 234101)
隨著大數(shù)據(jù)時代的到來,信息數(shù)據(jù)呈指數(shù)極增長,傳統(tǒng)的文件存儲方式已無法滿足海量數(shù)據(jù)的存儲需求,分布式文件系統(tǒng)的應(yīng)用越來越廣泛。HDFS(Hadoop Distribute File System)作為分布式文件系統(tǒng)的典型代表,以其低成本、高可靠性、大數(shù)據(jù)處理等優(yōu)勢,成為海量數(shù)據(jù)存儲的理想方案。HDFS采用副本技術(shù)把數(shù)據(jù)副本存放在集群中多個不同節(jié)點上,當某個節(jié)點發(fā)生故障時,可通過副本進行恢復(fù),不會影響數(shù)據(jù)的讀取,保證了數(shù)據(jù)的可靠性。
在HDFS默認副本放置策略中,部分副本存放節(jié)點是隨機選擇的,對節(jié)點的實時負載和節(jié)點間網(wǎng)絡(luò)距離沒有充分考慮,容易導(dǎo)致集群系統(tǒng)負載不均衡,節(jié)點距離較遠時會降低數(shù)據(jù)傳輸效率,影響MapReduce的運算性能,集群系統(tǒng)整體性能下降。劉艷[1]通過節(jié)點負載與計算性能相匹配原則副本節(jié)點的選擇,實現(xiàn)副本放置。邵秀麗[2]選擇集群中存儲使用率較低的節(jié)點作為數(shù)據(jù)副本存放節(jié)點。劉黨朋[3]在數(shù)據(jù)副本存放時綜合考慮磁盤使用情況、節(jié)點性能、文件重要性等因素,優(yōu)先選擇負載較小的數(shù)據(jù)節(jié)點進行存放。林偉偉[4]結(jié)合節(jié)點負載和網(wǎng)絡(luò)距離計算評價值,基于評價值選擇副本放置節(jié)點,但是文中節(jié)點負載僅表示節(jié)點當前存放的數(shù)據(jù)塊數(shù)量,沒有考慮其他各項指標。
本文在已有研究基礎(chǔ)上,綜合考慮磁盤使用率、CPU使用率、內(nèi)存使用率、網(wǎng)絡(luò)距離等各項因素,對HDFS副本放置策略進行改進,以提高集群系統(tǒng)的存儲性能和負載均衡效果。
HDFS是開源云計算平臺Hadoop的核心組件,為海量數(shù)據(jù)提供存儲。HDFS對硬件的要求較低,可以部署在廉價設(shè)備上,采用流式數(shù)據(jù)訪問,能夠滿足海量數(shù)據(jù)的處理需求[5]。
圖1 HDFS體系結(jié)構(gòu)
HDFS采用主/從(Mater/Slave)體系結(jié)構(gòu)[6],類似傳統(tǒng)文件系統(tǒng),可以通過目錄路徑執(zhí)行文件的創(chuàng)建、讀取、刪除等操作。在HDFS集群中有1個主節(jié)點(NameNode)和多個從節(jié)點(DataNode),NameNode是集群管理者,負責(zé)管理元數(shù)據(jù)等,真正實現(xiàn)數(shù)據(jù)存儲的是DataNode??蛻舳嗽L問文件先要與NameNode交互獲取文件元數(shù)據(jù),然后直接與DataNode建立通訊進行文件操作。HDFS體系結(jié)構(gòu)如圖1所示。
客戶端把要寫入的文件進行分塊(默認大小64M),向NameNode發(fā)起文件寫入請求,并把數(shù)據(jù)塊信息寫入NameNode,NameNode根據(jù)集群中節(jié)點狀態(tài)選擇可用的DataNode,并返回DataNode列表給客戶端用來存放數(shù)據(jù)塊副本??蛻舳说玫焦?jié)點信息后,開始以數(shù)據(jù)塊形式向第一個DataNode寫入數(shù)據(jù),然后以流水線方式依次向其他節(jié)點復(fù)制數(shù)據(jù),最后把各個存放副本的DataNode的最新信息反饋給NameNode。HDFS文件寫入過程如圖2所示。
圖2 HDFS文件寫入過程
HDFS分布式文件系統(tǒng)中把文件分為多個數(shù)據(jù)塊,每個數(shù)據(jù)塊存在多個副本進行冗余存儲,采用機架感知[7]的副本放置策略,使同一數(shù)據(jù)塊的多個副本存儲在多個不同的機架上。HDFS中數(shù)據(jù)塊默認的副本數(shù)為3,通常盡可能把2個副本放置在相同機架數(shù)據(jù)節(jié)點上,1個副本在不同機架上,相同機架可獲得較好的網(wǎng)絡(luò)傳輸性能,而放置在不同機架可以保證數(shù)據(jù)的安全性。默認的副本放置策略如圖3所示。
如果客戶端為集群中節(jié)點,則把副本1放置在客戶端所在數(shù)據(jù)節(jié)點,副本2放置在和副本1相同機架不同節(jié)點,副本3則隨機選擇不同機架中節(jié)點進行存放;如果客戶端不在集群中,則在集群中隨機選擇一個節(jié)點進行副本1放置。把副本1和副本2放置在同一機架,減少了機架間數(shù)據(jù)傳輸,提高了文件的讀寫速度,保證了讀寫數(shù)據(jù)的帶寬;副本3隨機放置在不同遠端機架上,當本地節(jié)點失效時,系統(tǒng)會自動從遠端機架副本進行恢復(fù),提高了數(shù)據(jù)的可靠性和安全性。
HDFS默認副本放置策略中,權(quán)衡了數(shù)據(jù)傳輸?shù)膸捄蛿?shù)據(jù)的可靠性,但是由于副本節(jié)點的隨機選擇,使得集群系統(tǒng)在負載均衡和傳輸性能等方面仍然存在一些問題,有待進一步改進。(1)由于HDFS大都部署在廉價機器上,各個節(jié)點的硬件性能存在差異,而默認策略中認為集群中節(jié)點同構(gòu),會導(dǎo)致性能高的節(jié)點利用率低,性能低的節(jié)點負載較高,使得集群系統(tǒng)性能下降。(2)隨機選擇節(jié)點進行副本存放,未考慮節(jié)點負載情況,會導(dǎo)致副本放置在高負載的節(jié)點,而低負載節(jié)點可能會閑置,導(dǎo)致集群負載不均衡,影響整體性能。(3)由于存放節(jié)點的隨機選擇,未考慮節(jié)點間的網(wǎng)絡(luò)距離,當本地節(jié)點出現(xiàn)故障需要從遠程節(jié)點進行恢復(fù)時,如果遠程節(jié)點網(wǎng)絡(luò)距離過遠,則會消耗過多時間進行數(shù)據(jù)傳輸。
在進行副本放置時要盡可能保證集群系統(tǒng)負載均衡和數(shù)據(jù)傳輸性能,因此在改進默認副本放置策略時要注意以下幾個方面:(1)數(shù)據(jù)可靠性。與默認策略相同,要把副本放置在不同機架,確保節(jié)點故障時仍可自動恢復(fù)。(2)網(wǎng)絡(luò)距離。HDFS中節(jié)點失效時常發(fā)生,副本恢復(fù)是系統(tǒng)運行時常態(tài),為了提高數(shù)據(jù)傳輸性能,減小數(shù)據(jù)傳輸?shù)臅r間消耗,應(yīng)盡可能地確保副本存放節(jié)點距離較近。(3)負載均衡。建立節(jié)點負載模型,副本放置時考慮節(jié)點負載,盡可能使集群負載均衡。
可見,副本放置時要綜合考慮節(jié)點實時負載和節(jié)點網(wǎng)路距離。結(jié)合節(jié)點負載和網(wǎng)絡(luò)距離,建立節(jié)點綜合評價值,并對評價值進行排序,選擇評價值較高的節(jié)點進行副本放置,兼顧系統(tǒng)負載均衡和數(shù)據(jù)傳輸,盡可能提高集群系統(tǒng)性能。
3.2.1 節(jié)點負載
通常情況下,衡量節(jié)點負載的指標主要包括CPU使用率、內(nèi)存使用率、網(wǎng)絡(luò)帶寬使用率等。在HDFS集群中,客戶端對節(jié)點進行文件的讀取和寫入會給節(jié)點造成一定的負載壓力,因此,考慮把磁盤的I/O訪問率作為節(jié)點負載指標。另外,磁盤剩余空間較大的節(jié)點需存儲較多的數(shù)據(jù)文件,磁盤剩余空間較小的節(jié)點存儲較少的數(shù)據(jù),副本隨機放置時如磁盤空間不足則需重新選擇節(jié)點進行存放,會造成不必要的開銷,所以,需要把磁盤使用率作為衡量節(jié)點負載的首要考慮因素。
綜合考慮,本文使用CPU使用率、內(nèi)存使用率、網(wǎng)絡(luò)帶寬使用率、磁盤空間使用率、磁盤I/O訪問率五項指標來衡量節(jié)點的負載情況[8]。第i個節(jié)點的負載L(i)可表示為:
(1)
(2)
3.2.2 網(wǎng)絡(luò)距離
存放數(shù)據(jù)的節(jié)點與副本節(jié)點間網(wǎng)絡(luò)距離的大小直接影響了數(shù)據(jù)傳輸?shù)膸?,網(wǎng)絡(luò)距離越小則帶寬越大,數(shù)據(jù)傳輸效率越高,數(shù)據(jù)讀寫時間越短。在Hadoop中,將網(wǎng)絡(luò)描述成樹形拓撲結(jié)構(gòu),葉節(jié)點為Data Node,內(nèi)部節(jié)點為路由器、交換機等網(wǎng)絡(luò)設(shè)備,在網(wǎng)絡(luò)拓撲中,子節(jié)點與父節(jié)點的距離為1,任意兩個Data Node的距離是它們到最近共同祖先的距離總和[10]。
假設(shè)節(jié)點i與存放數(shù)據(jù)節(jié)點網(wǎng)絡(luò)距離為d(i),最大距離為dmax,則可使用式(3)描述網(wǎng)絡(luò)距離。
(3)
D(i)表示節(jié)點i的網(wǎng)絡(luò)距離系數(shù),與實際網(wǎng)絡(luò)距離成正比,且D(i)∈[0,1]。
3.2.3 綜合評價值
通過節(jié)點的實時負載和網(wǎng)絡(luò)距離對節(jié)點進行綜合評價,衡量節(jié)點是否適合作為存放節(jié)點進行副本放置。節(jié)點i綜合評價值Eval(i)如式(4)所示。
Eval(i)=αL(i)+βD(i).
(4)
其中,α和β分別用于描述節(jié)點負載和網(wǎng)絡(luò)距離在評價中的比重,由系統(tǒng)管理員根據(jù)系統(tǒng)對負載均衡和數(shù)據(jù)傳輸性能的需求指定[4],且α+β=1。綜合評價值Eval(i)的值越大,則節(jié)點性能越低;反之,則性能越高。
(1)客戶端為集群中節(jié)點時,把客戶端所在機架作為本地機架,判斷當前節(jié)點磁盤使用率是否超出閾值,未超出則選擇當前節(jié)點進行副本放置,超出則說明磁盤剩余空間不足,在本地機架對綜合評價值Eval排序,選擇評價值較低的兩個節(jié)點分別作為第一個副本和第二副本的存放節(jié)點。
從遠程機架選擇綜合評價值Eval最低的節(jié)點作為第三副本存放節(jié)點。把三個副本節(jié)點保存到目標節(jié)點數(shù)組。
(2)客戶端為集群外節(jié)點時,對集群中節(jié)點進行綜合評價值排序,選擇評價值最低的兩個節(jié)點作為第一個副本和第二副本的存放節(jié)點,并將這兩個節(jié)點存入目標節(jié)點數(shù)組,同時加入到不可選節(jié)點列表中,防止其他副本繼續(xù)放置在已選擇節(jié)點。
判斷第一副本和第二副本是否在同一機架,如果為同一機架,則在遠程機架選擇綜合評價值Eval最低的節(jié)點作為第三副本存放節(jié)點;否則,在第一副本所在機架,選擇Eval最低的節(jié)點作為第三副本存放節(jié)點。把第三副本節(jié)點加入目標節(jié)點數(shù)組。
(3)將目標節(jié)點數(shù)組返回給客戶端,由客戶端與節(jié)點進行交互實現(xiàn)副本寫入操作,同時清空目標節(jié)點數(shù)組和不可選節(jié)點列表。
采用VMware虛擬機部署Hadoop集群實驗環(huán)境,包含5個機架,分別為R1、R2、R3、R4、R5,每個機架包括5個DataNode,分別為DN1、DN2、DN3、DN4、DN5,集群共由25臺PC構(gòu)成,所有節(jié)點操作系統(tǒng)使用ubuntu14.04LTS并安裝JDK和Hadoop分布式環(huán)境,并進行相應(yīng)配置,如環(huán)境變量、IP地址、開發(fā)環(huán)境等。實驗所用集群中使用機架R1中節(jié)點作為客戶端進行數(shù)據(jù)提交,其他機架與機架R1網(wǎng)絡(luò)距離大小排序依次為R2、R3、R4、R5,即R1與R2網(wǎng)絡(luò)距離最近,與R5距離最遠。
假設(shè)初始狀態(tài)集群中各節(jié)點都沒有存放數(shù)據(jù)塊,把機架R1中節(jié)點DN1作為客戶端進行文件寫入,該文件大小為20G,默認副本數(shù)據(jù)塊大小64M,默認副本數(shù)為3,可把該文件分為320個數(shù)據(jù)塊,按照默認副本放置策略,本地機架存放2個副本,遠程機架存放1個副本,則機架R1上存放640個數(shù)據(jù)塊,遠程機架存放320個數(shù)據(jù)塊。
4.2.1 副本數(shù)量分布
本地機架各節(jié)點的數(shù)據(jù)塊分布如圖4所示。
圖4 本地機架節(jié)點副本分布
圖5 默認策略下遠程機架節(jié)點副本分布
默認副本放置策略下,本地機架隨機選擇節(jié)點進行副本存放,各節(jié)點副本分布數(shù)量差異較大。改進的策略下,考慮了節(jié)點性能以及剩余磁盤空間等因素,根據(jù)綜合評價值進行節(jié)點選擇,使得各節(jié)點副本數(shù)分別相對較均勻。
默認副本策略未考慮節(jié)點網(wǎng)絡(luò)距離對數(shù)據(jù)傳輸?shù)挠绊?,遠程機架無論網(wǎng)絡(luò)距離遠近,其存放副本數(shù)量沒有太大差異,一定程度上耗費了更多的帶寬,導(dǎo)致系統(tǒng)傳輸性能下降,如圖5所示。改進策略中,通過網(wǎng)絡(luò)距離和節(jié)點負載對節(jié)點進行性能評價,判斷是否適合存放副本。為了兼顧網(wǎng)絡(luò)距離對帶寬的影響和集群系統(tǒng)負載均衡,平衡因子α和β取值均為0.5,改進策略下遠程機架節(jié)點副本分布如圖6所示。此時網(wǎng)絡(luò)距離所占權(quán)重較高,網(wǎng)絡(luò)距離較近的機架節(jié)點在負載相同情況下優(yōu)先進行副本存放,提高了數(shù)據(jù)傳輸帶寬,減少了數(shù)據(jù)副本放置的時間。
圖6 改進策略下遠程機架節(jié)點副本分布
圖7 改進策略前后負載均衡對比
4.2.2 負載均衡測試
利用式(5)計算出Hadoop集群系統(tǒng)節(jié)點負載標準差S,用來表示集群系統(tǒng)負載均衡度,S值越小則表明集群中節(jié)點間負載差異越小,系統(tǒng)負載均衡效果越好。
(5)
可見,在改進策略下,集群系統(tǒng)負載均衡度相對較低,節(jié)點負載差異相對較小,負載均衡效果較默認策略有一定的提高,較好地實現(xiàn)了系統(tǒng)負載均衡。
HDFS默認副本放置策略中由于副本存放節(jié)點隨機選擇且未考慮節(jié)點網(wǎng)絡(luò)距離對帶寬的影響,易導(dǎo)致負載集群系統(tǒng)負載不均且影響數(shù)據(jù)傳輸效率。針對這一問題,本文提出了一種改進的默認副本放置策略,該策略中把節(jié)點實時負載、網(wǎng)絡(luò)距離作為主要指標對節(jié)點進行評價,從而選擇合適節(jié)點進行副本放置。實驗分析表明,本文策略可防止高負載節(jié)點繼續(xù)放置副本,有效地實現(xiàn)集群負載均衡,提高數(shù)據(jù)傳輸效率,集群系統(tǒng)整體性能得到一定的提升。
[參考文獻]
[1]劉艷,蔡燕冬,謝曉東,等.異構(gòu)Hadoop集群中數(shù)據(jù)副本放置策略優(yōu)化[J].華中科技大學(xué)學(xué)報:自然科學(xué)版,2016(7):63-68.
[2]邵秀麗,王亞光,李云龍,等.Hadoop副本放置策略[J].智能系統(tǒng)學(xué)報,2013(6):489-496.
[3]劉黨朋.不均衡環(huán)境下面向Hadoop的負載均衡算法研究[D].北京:北京郵電大學(xué),2015.
[4]林偉偉.一種改進的Hadoop數(shù)據(jù)放置策略[J].華南理工大學(xué)學(xué)報:自然科學(xué)版,2012(1):152-158.
[5]胡銳,胡伏原,陳麗春.基于Hadoop的高校公共數(shù)據(jù)平臺的構(gòu)建[J].蘇州科技學(xué)院學(xué)報:自然科學(xué)版,2015(3):52-55.
[6]李明明,李偉.基于HDFS的高可靠性存儲系統(tǒng)的研究[J].西安科技大學(xué)學(xué)報,2016(3):428-433.
[7]Apache.Rack aware HDFS proposal [EB/OL].(2017-12-04)[2017-12-21].https://issues.apache.org/jira/secure/attachment/12345251/.2017.
[8]康承昆,劉曉潔.一種基于多衡量指標的HDFS負載均衡算法[J].四川大學(xué)學(xué)報:自然科學(xué)版,2014(6):1163-1169.
[9]徐玖平,吳巍.多屬性決策的理論與方法[M].北京:清華大學(xué)出版社,2006.
[10]羅鵬,龔勛.HDFS數(shù)據(jù)存放策略的研究與改進[J].計算機工程與設(shè)計,2014(4):1127-1131.