賈會玲 吳 晟 李英娜 李萌萌 楊 璽 李 川
(昆明理工大學(xué)信息工程與自動化學(xué)院,昆明 650500)
基于FileSystemAPI的HDFS文件存取和副本選擇優(yōu)化研究
賈會玲 吳 晟 李英娜 李萌萌 楊 璽 李 川
(昆明理工大學(xué)信息工程與自動化學(xué)院,昆明 650500)
在對HDFS進(jìn)行分析和研究的基礎(chǔ)上,在HDFS文件分布式系統(tǒng)中應(yīng)用FileSystem API進(jìn)行文件存儲和訪問,并通過改進(jìn)的蟻群算法對副本選擇進(jìn)行優(yōu)化。HDFS API能夠有效完成海量數(shù)據(jù)的存儲和管理,提高海量數(shù)據(jù)存儲的效率。通過改進(jìn)的蟻群算法提升了文件讀取時副本選擇的效率,進(jìn)一步提高了系統(tǒng)效率并使負(fù)載均衡。
HDFS FileSystem API 改進(jìn)的蟻群算法 副本選擇
互聯(lián)網(wǎng)特別是移動互聯(lián)網(wǎng)的發(fā)展,加快了信息化向社會經(jīng)濟(jì)各方面和日常生活的滲透。無論是個人數(shù)據(jù)、家庭數(shù)據(jù)還是企業(yè)數(shù)據(jù)都呈指數(shù)增長的態(tài)勢,這些數(shù)據(jù)大多為非關(guān)系型數(shù)據(jù),具有海量、復(fù)雜、多樣、異構(gòu)及動態(tài)變化等特性。如何高效存儲和管理這些數(shù)據(jù),使之得到高效利用已成為海量數(shù)據(jù)研究的熱點(diǎn)[1]。分布式技術(shù)的迅速發(fā)展,使它成為了一種解決海量數(shù)據(jù)與管理的有效方式。
HDFS(Hadoop Distributed File System)提供了一種高效、安全的海量數(shù)據(jù)分布式解決方案[2,3]。HDFS不僅提供了一個分布式環(huán)境,同時結(jié)合了FileSystem API,可大幅度提高文件上傳和下載的效率。副本技術(shù)是保證HDFS可靠性和性能的關(guān)鍵技術(shù),它能在很大程度上減少傳輸延遲,提高數(shù)據(jù)訪問和處理效率[4]。而副本選擇是HDFS中數(shù)據(jù)訪問和管理的基礎(chǔ),副本選擇策略的優(yōu)劣將直接影響系統(tǒng)的性能、負(fù)載平衡和可靠性[5]。
在HDFS整體結(jié)構(gòu)和讀寫原理研究的基礎(chǔ)之上,筆者在HDFS中應(yīng)用FileSystem API進(jìn)行文件存儲和訪問,介紹了系統(tǒng)設(shè)計(jì)和關(guān)鍵模塊的實(shí)現(xiàn)。并且,利用改進(jìn)的蟻群算法對HDFS文件讀取時的副本選擇進(jìn)行了優(yōu)化。
HDFS是一個典型的主從(Master/Slave)架構(gòu)(圖1),主要由一個名字結(jié)點(diǎn)(Namenode)、一個SecondaryNamenode、一個或多個數(shù)據(jù)結(jié)點(diǎn)(Datan-ode)組成。Namenode為Master結(jié)點(diǎn),是HDFS文件目錄和分配的管理者,它主要負(fù)責(zé)名字空間和塊的管理。SecondaryNamenode實(shí)質(zhì)上是Namenode的一個快照,用來保存Namenode中對HDFS的元數(shù)據(jù)備份,并減少Namenode的啟動時間。Datanode為Slave結(jié)點(diǎn),是HDFS中真正存儲數(shù)據(jù)的地方,它是文件存儲的基本單元。
圖1 HDFS架構(gòu)示意圖
HDFS采用流式數(shù)據(jù)訪問方式存儲數(shù)據(jù),對于客戶端寫入的數(shù)據(jù)先按照固定大小對這些數(shù)據(jù)進(jìn)行分塊,然后把每一個數(shù)據(jù)塊的多個副本存放在不同的Datanode節(jié)點(diǎn)上??蛻舳艘彩前凑辗謮K來讀取文件的數(shù)據(jù),客戶端總是選擇從距離它最近的可用的Datanode節(jié)點(diǎn)上讀取數(shù)據(jù)塊。
2.1文件讀流程
客戶端在讀文件時(圖2),首先通過FileSystem的open方法發(fā)出打開文件的請求;接著,客戶端調(diào)用read方法,開始從Datanode上讀取數(shù)據(jù),當(dāng)前Datanode的數(shù)據(jù)塊讀取完畢后,關(guān)閉此流與Datanode的連接;然后連接此文件的下一個數(shù)據(jù)塊的最近Datanode進(jìn)行塊讀取。當(dāng)客戶端讀取數(shù)據(jù)結(jié)束后,調(diào)用close方法,關(guān)閉該流。在讀取數(shù)據(jù)的過程中,若客戶端與Datanode節(jié)點(diǎn)通信出現(xiàn)錯誤時,客戶端會通知Namenode,然后試著連接下一個擁有此數(shù)據(jù)塊的Datanode進(jìn)行數(shù)據(jù)讀取。
圖2 文件讀流程
2.2文件寫流程
客戶端在寫文件時(圖3),首先對文件進(jìn)行分塊操作,同時通過create方法發(fā)出創(chuàng)建文件的請求,F(xiàn)ileSystem通過RPC協(xié)議將請求發(fā)送給Namenode,在Namenode的Namespace里面創(chuàng)建一個新的文件,同時Namenode分配可用的Datanode。FileSystem返回一個FSDataOutputStream給客戶端,用于寫入數(shù)據(jù),客戶端調(diào)用write方法,以流式方式將各塊寫入Datanode。當(dāng)客戶端寫數(shù)據(jù)完成后,調(diào)用close函數(shù),關(guān)閉該流。最后,F(xiàn)ileSystem通知Namenode寫入完畢。
3.1系統(tǒng)架構(gòu)
HDFS文件存儲系統(tǒng)基于JSP+JavaBean+Servlet模型,JSP充當(dāng)視圖層,JavaBean充當(dāng)模型層,Servlet充當(dāng)控制層。模型層(Model)把上傳或下載抽象成一個JavaBean組件,負(fù)責(zé)完成文件的上傳或下載。視圖層(View)主要負(fù)責(zé)顯示所要上傳或下載的文件目錄??刂茖?Controller)主要負(fù)責(zé)對前端JSP頁面?zhèn)鬟M(jìn)的參數(shù)進(jìn)行處理,然后調(diào)用相應(yīng)的JavaBean組件實(shí)現(xiàn)文件的上傳和下載。MVC模式的系統(tǒng)架構(gòu)如圖4所示。
MVC模式的工作原理為:所有的請求都被發(fā)送給作為控制層的Servlet。Servlet接收請求,并根據(jù)請求信息將它們分發(fā)給相應(yīng)的JSP頁面來響應(yīng);同時Servlet還根據(jù)JSP的需求生成相應(yīng)的JavaBean對象并傳輸給JSP,JSP通過直接調(diào)用方法或利用UseBean的自定義標(biāo)簽,得到 JavaBean中的數(shù)據(jù)。這種設(shè)計(jì)模式通過Servlet和JavaBean的合作來實(shí)現(xiàn)交互處理。
圖3 文件寫流程
圖4 HDFS文件存儲系統(tǒng)架構(gòu)框圖
3.2主要功能模塊的設(shè)計(jì)與實(shí)現(xiàn)
筆者提出的HDFS存儲系統(tǒng)采用HDFS作為底層架構(gòu)。HDFS的高可用性、高可靠性及容錯機(jī)制等特性增強(qiáng)了分布式云系統(tǒng)的穩(wěn)定性、可靠性和可擴(kuò)展性。為方便上層邏輯往底層文件系統(tǒng)中讀寫數(shù)據(jù),設(shè)計(jì)并實(shí)現(xiàn)了文件上傳和下載模塊。另外,文件下載模塊又包括副本選擇優(yōu)化模塊。HDFS文件的存儲是基于FileSystem API實(shí)現(xiàn)的。Hadoop類庫中最終面向用戶提供的接口類是FileSystem,該類是一抽象類,封裝了幾乎所有的文件操作。
用戶向Hadoop分布式文件系統(tǒng)中上傳文件時,首先由FileInputStream類創(chuàng)建本地文件的輸入流;然后由FileSystem類獲得URI對應(yīng)的HDFS文件系統(tǒng),以創(chuàng)建的方式打開Hadoop文件的輸出流,該輸出流指向HDFS目標(biāo)文件;最后用IOUtils工具將文件從本地文件系統(tǒng)復(fù)制到HDFS目標(biāo)文件中,并顯示當(dāng)前HDFS目標(biāo)文件中的所有文件目錄。文件上傳模塊流程如圖5所示。
圖5 基于FileSystem API的HDFS文件上傳流程
用戶從Hadoop分布式文件系統(tǒng)中下載文件到本地時,首先由Configuration類讀取Hadoop文件系統(tǒng)配置項(xiàng);其次,由FileSystem類獲得URI對應(yīng)的HDFS文件系統(tǒng)并打開一個URI對應(yīng)的FSDataInputStream文件輸入流,讀取文件;最后用IOUtils工具將文件從HDFS目標(biāo)文件中選定并保存到本地文件系統(tǒng)的指定路徑下,關(guān)閉輸入流和輸出流。文件下載模塊流程如圖6所示。
圖6 基于FileSystem API的HDFS文件下載流程
3.3副本選擇優(yōu)化模塊
3.3.1數(shù)據(jù)模型
筆者應(yīng)用蟻群算法設(shè)計(jì)出一種Hadoop集群環(huán)境下的副本選擇策略,該策略綜合考慮了磁盤的I/O速率、網(wǎng)絡(luò)帶寬、副本節(jié)點(diǎn)的負(fù)載狀況和物理距離d這4個主要因素[6,7]。對于客戶端來說,信息素濃度越大副本越佳。
當(dāng)創(chuàng)建數(shù)據(jù)副本時,先初始化信息素濃度,具體如下:
(1)
式中Filesize——副本大小;
r——磁盤的讀取速度。
當(dāng)副本發(fā)生變化時,副本的信息素濃度也會根據(jù)不同的情況做出相應(yīng)的改變,變化規(guī)律為:
(2)
其中,ΔTj為信息素濃度改變量;ρ為信息素持久度,取ρ=0.8,該參數(shù)表示即使副本沒有發(fā)生變化,信息素濃度也會相應(yīng)降低。副本信息素的變化規(guī)律包括以下3種情況:
b. 當(dāng)副本被成功訪問時,信息素濃度會上升,上升值ΔTj=cek,其中ce=0.8;
c. 當(dāng)副本被訪問失敗時,信息素濃度會降低,降低值ΔTj=-cpk,其中cp=1.1。
當(dāng)副本被刪除時,將信息素濃度置為零并設(shè)置停用標(biāo)志。當(dāng)副本信息素濃度有所變化時,該副本被選擇的概率也會隨之增減,可利用公式計(jì)算出每一個副本被選擇的概率[8],具體如下:
(3)
其中,Tj(t)、Tu(t)分別為副本所在節(jié)點(diǎn)j、u的當(dāng)前信息素濃度;ηj、ηu分別為相應(yīng)節(jié)點(diǎn)的初始信息素濃度;α和β分別代表當(dāng)前信息素和初始信息素的相對重要程度。筆者視二者權(quán)重相等,用于共同決定選擇概率,即α和β分別取為0.5。
若每次都選擇概率最大的副本,極易造成副本所在節(jié)點(diǎn)的負(fù)載不平衡。為保證節(jié)點(diǎn)的負(fù)載均衡,將計(jì)算出的選擇概率與該副本所在節(jié)點(diǎn)的負(fù)載完成率進(jìn)行結(jié)合運(yùn)算,使得每次被選中的副本節(jié)點(diǎn)不一定是計(jì)算概率最大的節(jié)點(diǎn):
(4)
其中,f、fmax分別表示訪問同一個存儲節(jié)點(diǎn)上的相同數(shù)據(jù)副本的任務(wù)個數(shù)和最大個數(shù)。
3.3.2副本選擇算法流程
在上述信息素初始化和變化規(guī)律的基礎(chǔ)上,設(shè)計(jì)了副本選擇蟻群算法,具體步驟如下:
a. 初始化信息素。利用式(1)對新創(chuàng)建的副本進(jìn)行信息素初始化。
b. 計(jì)算選擇概率。根據(jù)用戶的需求從副本中找出所有的可用副本,利用式(3)計(jì)算每個副本節(jié)點(diǎn)的選擇概率。
c. 選擇副本。將選擇概率與副本所在節(jié)點(diǎn)的負(fù)載完成率按照式(4)進(jìn)行結(jié)合運(yùn)算,將概率最大的副本節(jié)點(diǎn)作為訪問節(jié)點(diǎn)。
d. 更新信息素濃度。被選中作為訪問對象的節(jié)點(diǎn)進(jìn)行副本傳送時,減少信息素。若副本傳輸成功,則信息素濃度上升;若副本傳輸失敗,則信息素濃度降低。
海量數(shù)據(jù)信息的存儲是當(dāng)前信息時代面臨的問題,尋找到海量文檔的存儲解決方案對信息資源的有效存儲有著重要意義。HDFS提供了高效、穩(wěn)定且存儲成本相對低廉的分布式存儲方案。筆者設(shè)計(jì)了一種基于FileSystem API的HDFS文件存儲系統(tǒng),并通過改進(jìn)的蟻群算法對文件讀取時的副本選擇進(jìn)行了優(yōu)化。該系統(tǒng)基于分布式文件系統(tǒng)HDFS,并部署運(yùn)行在廉價的服務(wù)器集群之上,充分發(fā)揮了HDFS高可擴(kuò)展性、高可靠性的特點(diǎn),較好地利用了現(xiàn)有的存儲設(shè)施。但HDFS集群作為存儲環(huán)境也存在一些缺陷,如不適合于文件的隨機(jī)讀寫,對海量小文件的存儲也存在效率問題。
[1] 崔杰,李陶深,蘭紅星.基于Hadoop的海量數(shù)據(jù)存儲平臺設(shè)計(jì)與開發(fā)[J].計(jì)算機(jī)研究與發(fā)展,2012,49(z1):12~18.
[2] Ghemawat S,Cobioff H,Leung S T.The Google File System[C].Proceedings of the 19th ACM Symposium on Operating Systems Principles.New York:ACM Press,2003:29~43.
[3] Shvachko K,Kuang H,Radia S,et al.The Hadoop Distributed File System[C].2010 IEEE 26th Symposium on Mass Storage Systems and Technologies (MSST).Washington DC, USA:IEEE,2010:1~10.
[4] 劉田甜,李超,胡慶成,等. 云環(huán)境下多副本管理綜述[J].計(jì)算機(jī)研究與發(fā)展,2011,48(z3):254~260.
[5] 羅鵬,龔勛.HDFS數(shù)據(jù)存放策略的研究與改進(jìn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2014,35(4):1127~1131.
[6] 王彩亮,李浩,姚紹文.云環(huán)境中數(shù)據(jù)副本選擇策略研究[C].The 2nd Asia-Pacific Conference on Information Network and Digital Content Security. Paris: Atlantis Press,2011:12~17.
[7] 陳蕾,楊鵬.螞蟻算法在數(shù)據(jù)網(wǎng)格副本選擇中的應(yīng)用研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(23):6157~6160.
[8] 王輝,錢鋒.群體智能優(yōu)化算法[J].化工自動化及儀表,2007,34(5):7~13.
ResearchofHDFSFileSystemAccessandOptimizationofReplicaSelectionBasedonFileSystemAPI
JIA Hui-ling, WU Sheng, LI Ying-na, LI Meng-meng, YANG Xi, LI Chuan
(FacultyofInformationEngineeringandAutomation,KunmingUniversityofScienceandTechnology,Kunming650500,China)
Based on analysis and research of HDFS, having FileSystem API applied in HDFS to store and access files was implemented, including having the improved ant colony algorithm adopted to optimize the replica selection. HDFS API can effectively store and manage mass data and improve efficiency of mass data storage. Though making use of improved ant colony algorithm to promote efficiency of the file replica selection in reading files, the system efficiency and load balancing can be improved.
HDFS, FileSystem API, improved ant colony algorithm, replica selection
TP399
A
1000-3932(2016)06-0623-05
2016-04-28(修改稿)基金項(xiàng)目:國家自然科學(xué)基金項(xiàng)目(51467007)