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