陳 偉
(宿州職業(yè)技術學院計算機系, 安徽 宿州 234101)
隨著教育信息化的不斷推進,高校信息化建設得到了飛速發(fā)展,各個高校都積極投身于教育資源平臺的建設中,教育資源也呈幾何級增長。然而,由于各高校相對獨立,教育資源存在著分布不平衡、重復建設、利用率低、更新較慢等問題,高校之間教育資源不能實現共享,大量資源不能充分利用,甚至閑置浪費。這些都嚴重制約了高校教育信息化的發(fā)展。同時,隨著教育資源的不斷增長,海量的數據資源的存儲和管理成為新的難題。傳統(tǒng)的存儲架構管理效率不高、存儲能力不足且需要昂貴的硬件投入,其已無法滿足海量數據的處理需求。針對以上問題,如何節(jié)約高校教育資源,提高教育資源利用率,有效解決教育資源平臺海量數據存儲是本次研究的主要內容。
HDFS(Hadoop Distribute File System)分布式文件系統(tǒng),以其高可靠性、低成本和大數據處理等優(yōu)勢,近年來得到了廣泛的應用。本次研究構建的教育資源云平臺基于HDFS進行設計,引入云存儲技術,為高校教育資源云存儲平臺的構建提供新的思路。
云存儲是云計算環(huán)境下的一種新的網絡存儲方式,伴隨云計算技術發(fā)展而產生,是對云計算的延伸和發(fā)展[1]。其在云計算的基礎上,通過集群應用、網格技術或分布式文件系統(tǒng)等方式,把網絡中各種存儲設備協(xié)調一致進行工作,共同對外提供數據存儲及業(yè)務訪問功能[2]。云存儲通過虛擬化技術,把大量的存儲設備、硬件及服務器等虛擬為存儲資源池,根據用戶需求進行資源的動態(tài)分配[3]。云存儲把應用軟件與存儲設備相結合,將存儲資源放到云端,用戶可以隨時隨地通過各種終端設備連接到云端進行存取。云存儲采用分布式存儲方式,具有高效、安全、低成本、可共享等特點。
不同于傳統(tǒng)的存儲設備,云存儲由硬件和軟件2部分構成。硬件主要指存儲設備,軟件部分包含應用軟件、客戶端程序、訪問接口等,是一個完整的云計算系統(tǒng)。各部分以存儲設備為基礎,通過一系列應用軟件使得云存儲可以為用戶提供不同的應用服務。云存儲結構模型由4層組成,常見結構模型如圖1所示。
訪問層提供接入功能,用戶可以通過該層訪問云存儲平臺;應用接口層提供開放的API接口,通過接口程序可以開發(fā)多種不同應用,提供多種不同服務;基礎管理層由分布式文件系統(tǒng)、網格計算、集群技術等實現云存儲設備協(xié)同工作,對外提供基礎服務及管理工作;存儲層是云存儲最基礎部分,包括存儲設備、管控系統(tǒng)等。
圖1 云存儲結構模型
HDFS是開源云計算平臺Hadoop中的分布式文件系統(tǒng)[4],是Hadoop中的核心組件,為海量數據提供存儲。HDFS的高容錯性,使其對硬件的配置沒有過高要求,可以部署在低成本的通用設備上,并且其數據訪問具有高吞吐率,能夠滿足海量數據的處理需求[5]。
圖2 HDFS體系結構
NameNode是HDFS中主從結構中的Master,是集群的管理者,負責管理HDFS名字空間,存儲元數據,處理客戶端的數據請求,其本身不進行文件的讀寫操作。DataNode是從節(jié)點,負責數據實際存儲和操作。定期通過心跳機制向NameNode反饋節(jié)點運行狀態(tài)及塊映射信息,接收NameNode的指令,進行數據塊的創(chuàng)建、刪除等操作。同時,DataNode與其他DataNode之間互相通信,進行數據塊的復制,建立副本,保證數據冗余,提高可靠性。Secondary Name Node是NameNode的冷備份,定期獲取NameNode的相關信息并進行保存。正常情況下Secondary Name Node與其他進程不做交互操作,當發(fā)生故障時,其不能代替NameNode工作,但可以輔助恢復NameNode。
2.2.1 HDFS寫入過程
假設要寫入文件File1,文件大小100 M。按照默認數據塊64 M計算,將其劃分為2個數據塊,分別記作block1和block2。HDFS寫操作流程如下:
(1) Client向NameNode發(fā)送寫File1文件的請求,如圖3中的①。
(2) NameNode記錄數據塊信息,把可用節(jié)點信息返回給Client,如圖3中的②。根據NameNode機架感知功能,若Client為數據節(jié)點,副本1放置在Client所在節(jié)點,若Client不在集群內則隨機選擇一個節(jié)點;副本2放置在不同機架的節(jié)點;副本3放在同副本2相同的節(jié)點;其他副本隨機選擇。最終,block1和block2選擇的副本放置節(jié)點分別為Data-Node2、DataNode4、DataNode5和DataNode6、Data-Node7、DataNode8。
(3) 根據網絡距離Client直接聯(lián)系DataNode2發(fā)送數據塊block1,并把block1的副本以流水線的形式發(fā)送給DataNode4,DataNode4再發(fā)送給Data-Node5,如圖3中的③;操作完成后,DataNode2、DataNode4、DataNode5按流水線反方向發(fā)回確認信息給Client,告知block1已寫入完畢,如圖3中的④;同時把DataNode的最新信息反饋到NameNode,更新元數據,如圖3中的⑤。發(fā)送完block1再向DataNode6、DataNode7、DataNode8發(fā)送block2,過程同block1。
圖3 HDFS寫入過程
2.2.2 HDFS讀取過程
HDFS讀取文件操作過程如下:
(1) 客戶端(Client)向名NameNode發(fā)起讀取File1請求,詢問從哪些DataNode上讀取,如圖4中的①。
(2) NameNode向客戶端返回數據塊對應的DataNode信息。NameNode接到客戶端讀取請求后,檢查元數據信息,定位block1、block2各自所在的節(jié)點并返回信息給客戶端,如圖4中的②。
(3) 客戶端根據NameNode返回的數據塊信息,與相應的DataNode建立通信,請求讀取數據塊。在此過程中先讀取block1再讀取block2, block1從DataNode2上讀取,block2從DataNode6上讀取。此過程如圖4中的③。
(4) DataNode返回數據塊給客戶端,客戶端把從不同DataNode上讀取的數據塊進行聯(lián)結,拼成完整的文件,如圖4中的④。
圖4 HDFS讀文件過程
3.1.1 總體架構
基于HDFS高校教育資源云存儲平臺總體架構設計如圖5 所示。
圖5 存儲平臺總體架構圖
云存儲平臺需要搭建Hadoop平臺。平臺中集群由運行HDFS文件系統(tǒng)的計算機構成,用來實現文件的存儲,包括1個NameNode和若干個DataNode;建立BS模式的高校教育資源網站平臺,為用戶提供云存儲服務。在Web服務器上運行基于HDFS API接口的Web應用程序,用來實現對HDFS的文件訪問和操作。使用tomcat作為Web服務器,使用數據庫MySQL 和 MongoDB作為數據塊服務器。
Hadoop平臺采用Java語言編寫。因此,建設高校教育資源網站時也采用Java作為開發(fā)語言,開發(fā)工具使用Eclipse。云存儲平臺同時使用了MySQL 和 MongoDB數據庫,MySQL用來存儲用戶信息。由于云存儲中需要存放海量數據,每個用戶都會產生大量的文件信息,傳統(tǒng)的關系數據庫無法滿足需求,因此采用分布式數據庫MongoDB來存儲文件和文件夾信息。
3.1.2 平臺層次結構
在圖1所示云存儲結構模型基礎上,結合Hadoop云平臺技術,采用HDFS分布式文件系統(tǒng),構建高校教育資源云存儲平臺,如圖6所示。
(1) 訪問層。用戶通過瀏覽器訪問高校校園資源云網站頁面,實現用戶注冊、登錄等操作。
(2) 應用接口層。該層包含Web服務器和數據庫服務器,采用Java語言進行編程,調用HDFS的API接口,實現文件讀寫等各種操作。
(3) 數據管理層。數據管理層通過HDFS集群的部署,向外界提供數據服務,實現數據的讀寫、刪除、備份和共享。
圖6 高校教育資源云存儲平臺層次結構
(4) 存儲層。數據的實際存儲放在存儲層。該層的存儲設備由HDFS集群所在計算機的磁盤構成。
3.2.1 HDFS集群搭建
為簡單起見,使用7臺普通PC構成HDFS集群。1臺作為NameNode節(jié)點(主機名為master1),1臺作為Secondary Name Node(主機名為master2),其余5臺作為DataNode節(jié)點(分別為slave1、slave2、slave3、slave4、slave5),集群結構如圖7所示。
所有節(jié)點安裝ubuntu14.04 LTS操作系統(tǒng),以及JDK和Hadoop,并進行相應配置,如環(huán)境變量、IP地址等。
3.2.2 配置開發(fā)環(huán)境
要實現用戶對云存儲平臺的文件交互操作,需要開發(fā)Web應用程序來調用HDFS的 API,實現與HDFS中存儲數據的各項操作。由于HDFS基于 Java語言實現,所以需要安裝Eclipse軟件作為開發(fā)環(huán)境,進行Web應用程序的開發(fā)。
3.3.1 功能需求
建立高校教育資源網作為云存儲平臺的外部訪問接口,使各個高校通過Web方式進行資源共享,整合教育資源,獲取資源服務。高校間需要制定相應的云服務使用方案,規(guī)范用戶獲取服務的行為及權限,提供擴展接口,讓更多的高校加入云平臺中。
高校教育資源網采用JAEE技術,在云存儲平臺上進行開發(fā),運行于云平臺的tomcat服務器上。
通過對高校教育資源云存儲平臺作需求分析可知,云存儲平臺需具備的主要功能包括:(1) 用戶管理,包括用戶認證、個人信息查看,編輯,收藏,分享,好友等;(2) 文件管理,包括文件上傳、下載、搜索、重命名、刪除、共享等;(3) 文件夾管理,包括文件夾刪除、新建、共享等。
3.3.2 功能實現
使用Java語言編寫后臺代碼,通過對HDFS的 API接口調用,實現云存儲平臺的相關功能,主要功能如下。
(1) 文件上傳。HDFS中使用FileSystem的copyFromLocalFile 方法,實現本地文件向HDFS 集群的上傳操作。上傳代碼見圖8。
public static FileSystem getMyhdfs() throws IOException{
∥獲取配置文件
Configuration conf=new Configuration();
∥獲取文件系統(tǒng)
FileSystem hdfs=FileSystem.get(conf);
return hdfs;}
public void writeToHDFS(String src,String dst)throws Exception{
File file=new File(src);
try{
FileSystem hdfs=getMyhdfs();
Path src_Path=new Path(src);
Path dst_Path=new Path(dst);
hdfs.copyFromLocalFile(src_Path,dst_Path);
hdfs.close();}
catch(exception e){System.out.println(e.getMessage());}
finally{if(hdfs!=mull){hdfs.close();}}}
圖8文件上傳代碼
(2) 使用copyToLocalFile實現文件下載,代碼見圖9。
public static void putfile(String src,String dst)throws IOException{
FileSystem fs=getMyhdfs();
Path src_Path=new Path(src);
Path dst_Path=new Path(dst);
fs.copyToLocalFile(src_Path,dst_Path);
fs.close();}
圖9文件下載代碼
(3) 使用rename實現文件重命名,代碼見圖10。
public static void renameFile(String src,String dst)throws IOException{
FileSystem fs=getMyhdfs();
Path src_Path=new Path(src);
Path dst_Path=new Path(dst);
fs.rename(src_Path,dst_Path);
fs.close();}
圖10文件重命名代碼
(4) 文件刪除,代碼見圖11。
public static void deletefile(String fileName)throws IOException{
FileSystem fs=getMyhdfs();
fs.deleteOnExit(new Path(fileName));
}
圖11文件刪除代碼
引入云存儲技術,利用開源的Hadoop云計算平臺,構建了基于HDFS的高校教育資源云存儲平臺,有效整合教育資源,解決了海量數據的存儲問題。高校通過統(tǒng)一的教育資源網站,實現了教學資源的共享,提高了教育資源的利用率。
[1] 于春生.高校校園云存儲系統(tǒng)設計與實現[D].天津:天津大學,2014:6-7.
[2] 孫海英.云存儲在高校圖書館數據管理中的應用[J].經濟師,2017(6):201.
[3] 王鳳領.基于Hadoop高校教育資源云存儲平臺構建研究[J].計算機技術與發(fā)展,2016,26(3):176-180.
[4] The apache software foundation. Text:Welcome to Apache Hadoop[EBOL].[2017-08-06]. http:∥hadoop.apache.orgindex.html.
[5] 胡銳,胡伏原,陳麗春.基于Hadoop的高校公共數據平臺的構建[J].蘇州科技學院學報(自然科學版),2015,32(3):52-55.
[6] 李明明,李偉.基于HDFS的高可靠性存儲系統(tǒng)的研究[J].西安科技大學學報,2016,36(3):428-433.