閆偉 陳滿林 白云鶴 班海濤
摘 要:目前,大多數學生均使用U盤進行數據存儲,但這種方式存在數據容易中毒、U盤容易丟失、無法在實驗室和寢室間同步等弊端,為此,需要開發一個以校園局域網為依托,可供學生使用的校園網盤。利用該網盤,學生可不再使用U盤進行數據存儲,在校期間所涉及的所有數字化文件均可存儲其中,同時,還可實現教學區域與寢室的數據同步,既保證了數據存儲的安全性,又極大地提高了數據的應用效率。此外,校園網盤采用Hadoop架構完成整個底層系統的搭建,屬于“云計算”應用的技術范疇,能夠充分利用學校目前已有的PC機資源,降低項目投入。
關鍵詞:Hadoopp;HDFS;網盤;云計算
隨著計算機在高校教學中的普及,各種文檔、數據、程序等數字化文件成為了高校學生非常重要的學習資料和學習成果,大到畢業設計文檔、畢業設計項目,小到課程PPT、作業,涵蓋了學生學習生活的各個方面,如何安全、高效的存儲這些文件就變得非常重要。因此,以“云計算”架構Hadoop為基礎,依托校園網環境,設計并實現校園網盤,就成為了一種可行之道。
1 方案論證
1.1 技術可行性
由Hadoop HDFS為網盤提供高可用,分布式的存儲架構支撐。HDFS(Hadoop Distributed File System)是Hadoop項目的核心子項目,是分布式計算中數據存儲管理的基礎,是基于流數據模式訪問和處理超大文件的需求而開發的,可以運行于廉價的商用服務器上。其具有的高容錯、高可靠性、高可擴展性、高獲得性、高吞吐率等特征為海量數據提供了不怕故障的存儲,為超大數據集(Large Data Set)的應用處理帶來了很多便利。
1.2 操作可行性
基于HDFS的分布式存儲相關研究,主要包括HDFS集群中小文件處理,副本存放策略和機架感知以及NameNode備份恢復機制和拓展機制。HDFS集群中小文件處理包括三種方案,分別是Hadoop Archive,Sequence File和CombineFileInputormat。副本存放策略和機架感知能夠讓NameNode獲取DataNode的網絡拓撲圖,然后根據DataNode之間的關系來確定副本存放的位置,保證數據可靠性的同時兼顧了數據傳輸速率。NameNode備份恢復機制通過定期對NameNode中元數據信息備份合并形成新的檢查點checkpoint保證NameNode元數據的安全。如果NameNode出現宕機故障,可以節省NameNode重啟時間,甚至恢復丟失的數據。HDFS的可拓展性體現在動態新增DataNode,能夠滿足大規模數據增長的需求。
2 系統架構設計與實現
2.1 系統結構設計
系統主要由四部分構成,分別是用戶層,系統管理層,數據存儲層和基礎設施層,(1)用戶層:用戶通過WebApp服務器發送Ajax請求,服務器響應相應的json數據到瀏覽器,前端通過Angular JS框架調用響應功能REST接口返回數據,最后通過Angular JS雙向數據綁定自動完成對頁面數據進行渲染。(2)系統管理層:負責應用程序與底層數據操作連接,采用JFinal MVC框架對大量文件,用戶操作封裝為REST接口,提供前端Web頁面的接口的數據返回,把用戶需要的數據結果以json格式傳回客戶端。主要提供用戶管理,目錄管理,文件管理等服務。(3)存儲數據層:Hadoop集群工作在這一層,由HDFS,Jetty構成,HDFS提供分布式存儲支撐,一個NameNode存儲文件的元數據,多個DataNode為文件提供存儲實現, Jetty服務器提供外部REST接口調用功能。同時這一層也大量封裝了對HDFS的操作。(4)基礎設施層:即搭載Linux系統的硬件基礎設施,主要包括磁盤,服務器等。
2.2 系統功能實現
本系統旨在一個在校大學校的一個存儲服務。系統設計包括用戶文件管理模塊和管理員模塊。用戶文件管理模塊:為在校師生提供用戶登陸,文件上傳,下載,刪除,重命名,目錄查看,創建等功能。管理員模塊:主要提供用戶管理(添加,刪除),文件管理。
2.3 關鍵技術實現
系統在實現過程中,主要實現了對文件的上傳,下載。瀏覽器通過調取REST接口,Controller通過調用相應的Service來返回相應的數據,Service調用DAO,而DAO的核心代碼都是通過HDFS的相應API來完成的。
上傳功能的核心代碼:
public boolean upLoad(InputStream in, String hdfsPath){
Path p=new Path(hdfsPath);
try{
if(fs.exists(p)){
System.out.println(“文件已經存在”);
return false;
}
FileSystem fs = FileSystem.get(URI.create(hdfsPath),conf);
OutputStream out = fs.create(new Path(hdfsPath));
IOUtils.copyBytes(in, out, 4096,true);
in.close();
}catch(Exception e){
e.printStackTrace();
}
return true;
}
下載功能的核心代碼:
public boolean downLoad(String hdfsPath,String localPath ){
Path path = new Path(hdfsPath);
try {
if(!fs.exists(path)){
System.out.println(“文件不存在”);
return false;
}
FileSystem hdfs = FileSystem.get(conf);
Path dstPath = new Path(localPath);
hdfs.copyToLocalFile(true,path, dstPath);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
3 結束語
HDFS作為一種分布式文件系統,有著高容錯性的特點,設計用來部署在低廉的硬件上,而且它提供高吞吐量來訪問應用程序的數據,適合那些有著超大數據集的應用程序。HDFS放寬了POSIX的要求可以實現流的形式訪問文件系統中的數據。為了保證開發速度與系統的可維護性,選用JFinal來當做Web開發的MVC框架,同時這個框架的學習成本也比較低,輕量級,易拓展。
參考文獻
[1]文艾,王磊. 高可用性的HDFS:Hadoop分布式文件系統深度實踐[M].北京:清華大學出版社,2012,5.
[2]蔡斌,陳湘萍,董西成. Hadoop技術內幕[M].北京:機械工業出版社,2010:10-200.
[3]TomWhite.Hadoop:The Definitive Guide,3rd Edition[M].清華大學出版社,2015.
作者簡介:閆偉(1992-),男,大二學生,專業:計算機科學與技術。
白云鶴(1992-),男,大二學生,專業:計算機科學與技術。
班海濤(1992-),男,大二學生,專業:計算機科學與技術。
*通訊作者:陳滿林(1982-),男,講師,主要研究方向:計算機應用與智能系統。