賈會玲 吳 晟 李英娜 李萌萌 楊 璽 李 川
(昆明理工大學信息工程與自動化學院,昆明 650500)
基于FileSystemAPI的HDFS文件存取和副本選擇優化研究
賈會玲 吳 晟 李英娜 李萌萌 楊 璽 李 川
(昆明理工大學信息工程與自動化學院,昆明 650500)
在對HDFS進行分析和研究的基礎上,在HDFS文件分布式系統中應用FileSystem API進行文件存儲和訪問,并通過改進的蟻群算法對副本選擇進行優化。HDFS API能夠有效完成海量數據的存儲和管理,提高海量數據存儲的效率。通過改進的蟻群算法提升了文件讀取時副本選擇的效率,進一步提高了系統效率并使負載均衡。
HDFS FileSystem API 改進的蟻群算法 副本選擇
互聯網特別是移動互聯網的發展,加快了信息化向社會經濟各方面和日常生活的滲透。無論是個人數據、家庭數據還是企業數據都呈指數增長的態勢,這些數據大多為非關系型數據,具有海量、復雜、多樣、異構及動態變化等特性。如何高效存儲和管理這些數據,使之得到高效利用已成為海量數據研究的熱點[1]。分布式技術的迅速發展,使它成為了一種解決海量數據與管理的有效方式。
HDFS(Hadoop Distributed File System)提供了一種高效、安全的海量數據分布式解決方案[2,3]。HDFS不僅提供了一個分布式環境,同時結合了FileSystem API,可大幅度提高文件上傳和下載的效率。副本技術是保證HDFS可靠性和性能的關鍵技術,它能在很大程度上減少傳輸延遲,提高數據訪問和處理效率[4]。而副本選擇是HDFS中數據訪問和管理的基礎,副本選擇策略的優劣將直接影響系統的性能、負載平衡和可靠性[5]。
在HDFS整體結構和讀寫原理研究的基礎之上,筆者在HDFS中應用FileSystem API進行文件存儲和訪問,介紹了系統設計和關鍵模塊的實現。并且,利用改進的蟻群算法對HDFS文件讀取時的副本選擇進行了優化。
HDFS是一個典型的主從(Master/Slave)架構(圖1),主要由一個名字結點(Namenode)、一個SecondaryNamenode、一個或多個數據結點(Datan-ode)組成。Namenode為Master結點,是HDFS文件目錄和分配的管理者,它主要負責名字空間和塊的管理。SecondaryNamenode實質上是Namenode的一個快照,用來保存Namenode中對HDFS的元數據備份,并減少Namenode的啟動時間。Datanode為Slave結點,是HDFS中真正存儲數據的地方,它是文件存儲的基本單元。

圖1 HDFS架構示意圖
HDFS采用流式數據訪問方式存儲數據,對于客戶端寫入的數據先按照固定大小對這些數據進行分塊,然后把每一個數據塊的多個副本存放在不同的Datanode節點上。客戶端也是按照分塊來讀取文件的數據,客戶端總是選擇從距離它最近的可用的Datanode節點上讀取數據塊。
2.1文件讀流程
客戶端在讀文件時(圖2),首先通過FileSystem的open方法發出打開文件的請求;接著,客戶端調用read方法,開始從Datanode上讀取數據,當前Datanode的數據塊讀取完畢后,關閉此流與Datanode的連接;然后連接此文件的下一個數據塊的最近Datanode進行塊讀取。當客戶端讀取數據結束后,調用close方法,關閉該流。在讀取數據的過程中,若客戶端與Datanode節點通信出現錯誤時,客戶端會通知Namenode,然后試著連接下一個擁有此數據塊的Datanode進行數據讀取。

圖2 文件讀流程
2.2文件寫流程
客戶端在寫文件時(圖3),首先對文件進行分塊操作,同時通過create方法發出創建文件的請求,FileSystem通過RPC協議將請求發送給Namenode,在Namenode的Namespace里面創建一個新的文件,同時Namenode分配可用的Datanode。FileSystem返回一個FSDataOutputStream給客戶端,用于寫入數據,客戶端調用write方法,以流式方式將各塊寫入Datanode。當客戶端寫數據完成后,調用close函數,關閉該流。最后,FileSystem通知Namenode寫入完畢。
3.1系統架構
HDFS文件存儲系統基于JSP+JavaBean+Servlet模型,JSP充當視圖層,JavaBean充當模型層,Servlet充當控制層。模型層(Model)把上傳或下載抽象成一個JavaBean組件,負責完成文件的上傳或下載。視圖層(View)主要負責顯示所要上傳或下載的文件目錄。控制層(Controller)主要負責對前端JSP頁面傳進的參數進行處理,然后調用相應的JavaBean組件實現文件的上傳和下載。MVC模式的系統架構如圖4所示。
MVC模式的工作原理為:所有的請求都被發送給作為控制層的Servlet。Servlet接收請求,并根據請求信息將它們分發給相應的JSP頁面來響應;同時Servlet還根據JSP的需求生成相應的JavaBean對象并傳輸給JSP,JSP通過直接調用方法或利用UseBean的自定義標簽,得到 JavaBean中的數據。這種設計模式通過Servlet和JavaBean的合作來實現交互處理。

圖3 文件寫流程

圖4 HDFS文件存儲系統架構框圖
3.2主要功能模塊的設計與實現
筆者提出的HDFS存儲系統采用HDFS作為底層架構。HDFS的高可用性、高可靠性及容錯機制等特性增強了分布式云系統的穩定性、可靠性和可擴展性。為方便上層邏輯往底層文件系統中讀寫數據,設計并實現了文件上傳和下載模塊。另外,文件下載模塊又包括副本選擇優化模塊。HDFS文件的存儲是基于FileSystem API實現的。Hadoop類庫中最終面向用戶提供的接口類是FileSystem,該類是一抽象類,封裝了幾乎所有的文件操作。
用戶向Hadoop分布式文件系統中上傳文件時,首先由FileInputStream類創建本地文件的輸入流;然后由FileSystem類獲得URI對應的HDFS文件系統,以創建的方式打開Hadoop文件的輸出流,該輸出流指向HDFS目標文件;最后用IOUtils工具將文件從本地文件系統復制到HDFS目標文件中,并顯示當前HDFS目標文件中的所有文件目錄。文件上傳模塊流程如圖5所示。

圖5 基于FileSystem API的HDFS文件上傳流程
用戶從Hadoop分布式文件系統中下載文件到本地時,首先由Configuration類讀取Hadoop文件系統配置項;其次,由FileSystem類獲得URI對應的HDFS文件系統并打開一個URI對應的FSDataInputStream文件輸入流,讀取文件;最后用IOUtils工具將文件從HDFS目標文件中選定并保存到本地文件系統的指定路徑下,關閉輸入流和輸出流。文件下載模塊流程如圖6所示。

圖6 基于FileSystem API的HDFS文件下載流程
3.3副本選擇優化模塊
3.3.1數據模型
筆者應用蟻群算法設計出一種Hadoop集群環境下的副本選擇策略,該策略綜合考慮了磁盤的I/O速率、網絡帶寬、副本節點的負載狀況和物理距離d這4個主要因素[6,7]。對于客戶端來說,信息素濃度越大副本越佳。
當創建數據副本時,先初始化信息素濃度,具體如下:

(1)
式中Filesize——副本大小;
r——磁盤的讀取速度。
當副本發生變化時,副本的信息素濃度也會根據不同的情況做出相應的改變,變化規律為:
(2)
其中,ΔTj為信息素濃度改變量;ρ為信息素持久度,取ρ=0.8,該參數表示即使副本沒有發生變化,信息素濃度也會相應降低。副本信息素的變化規律包括以下3種情況:

b. 當副本被成功訪問時,信息素濃度會上升,上升值ΔTj=cek,其中ce=0.8;
c. 當副本被訪問失敗時,信息素濃度會降低,降低值ΔTj=-cpk,其中cp=1.1。
當副本被刪除時,將信息素濃度置為零并設置停用標志。當副本信息素濃度有所變化時,該副本被選擇的概率也會隨之增減,可利用公式計算出每一個副本被選擇的概率[8],具體如下:
(3)
其中,Tj(t)、Tu(t)分別為副本所在節點j、u的當前信息素濃度;ηj、ηu分別為相應節點的初始信息素濃度;α和β分別代表當前信息素和初始信息素的相對重要程度。筆者視二者權重相等,用于共同決定選擇概率,即α和β分別取為0.5。
若每次都選擇概率最大的副本,極易造成副本所在節點的負載不平衡。為保證節點的負載均衡,將計算出的選擇概率與該副本所在節點的負載完成率進行結合運算,使得每次被選中的副本節點不一定是計算概率最大的節點:
(4)
其中,f、fmax分別表示訪問同一個存儲節點上的相同數據副本的任務個數和最大個數。
3.3.2副本選擇算法流程
在上述信息素初始化和變化規律的基礎上,設計了副本選擇蟻群算法,具體步驟如下:
a. 初始化信息素。利用式(1)對新創建的副本進行信息素初始化。
b. 計算選擇概率。根據用戶的需求從副本中找出所有的可用副本,利用式(3)計算每個副本節點的選擇概率。
c. 選擇副本。將選擇概率與副本所在節點的負載完成率按照式(4)進行結合運算,將概率最大的副本節點作為訪問節點。
d. 更新信息素濃度。被選中作為訪問對象的節點進行副本傳送時,減少信息素。若副本傳輸成功,則信息素濃度上升;若副本傳輸失敗,則信息素濃度降低。
海量數據信息的存儲是當前信息時代面臨的問題,尋找到海量文檔的存儲解決方案對信息資源的有效存儲有著重要意義。HDFS提供了高效、穩定且存儲成本相對低廉的分布式存儲方案。筆者設計了一種基于FileSystem API的HDFS文件存儲系統,并通過改進的蟻群算法對文件讀取時的副本選擇進行了優化。該系統基于分布式文件系統HDFS,并部署運行在廉價的服務器集群之上,充分發揮了HDFS高可擴展性、高可靠性的特點,較好地利用了現有的存儲設施。但HDFS集群作為存儲環境也存在一些缺陷,如不適合于文件的隨機讀寫,對海量小文件的存儲也存在效率問題。
[1] 崔杰,李陶深,蘭紅星.基于Hadoop的海量數據存儲平臺設計與開發[J].計算機研究與發展,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] 劉田甜,李超,胡慶成,等. 云環境下多副本管理綜述[J].計算機研究與發展,2011,48(z3):254~260.
[5] 羅鵬,龔勛.HDFS數據存放策略的研究與改進[J].計算機工程與設計,2014,35(4):1127~1131.
[6] 王彩亮,李浩,姚紹文.云環境中數據副本選擇策略研究[C].The 2nd Asia-Pacific Conference on Information Network and Digital Content Security. Paris: Atlantis Press,2011:12~17.
[7] 陳蕾,楊鵬.螞蟻算法在數據網格副本選擇中的應用研究[J].計算機工程與設計,2008,29(23):6157~6160.
[8] 王輝,錢鋒.群體智能優化算法[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(修改稿)基金項目:國家自然科學基金項目(51467007)