陳 偉
南京醫(yī)科大學(xué)信息與網(wǎng)絡(luò)中心, 南京 210029
·網(wǎng)絡(luò)與遠(yuǎn)程教育·
基于Hadoop平臺的教育云存儲系統(tǒng)的構(gòu)建方法
陳 偉
南京醫(yī)科大學(xué)信息與網(wǎng)絡(luò)中心, 南京 210029
高校教學(xué)資源的建設(shè)是網(wǎng)絡(luò)輔助教學(xué)的一個重要組成部分。文章主要介紹了如何將云存儲應(yīng)用到高校教學(xué)資源的共享中,以降低高校教學(xué)資源建設(shè)和維護(hù)的成本,同時介紹了Hadoop平臺的搭建以及其中關(guān)鍵的技術(shù)。
云存儲;hadoop;數(shù)據(jù)傳輸
近年來,隨著互聯(lián)網(wǎng)技術(shù)在教育領(lǐng)域應(yīng)用的不斷深入,高質(zhì)量教育資源的建設(shè)越發(fā)成為影響網(wǎng)絡(luò)輔助教學(xué)效果的關(guān)鍵因素。而整合同類高校間的教育資源可以避免高校各自建設(shè)時存在的諸多問題,如教學(xué)資源利用率不高、共享程度低、分布不均、教學(xué)資源更新速度緩慢、重復(fù)建設(shè)、教學(xué)資源的制作不標(biāo)準(zhǔn)、管理不規(guī)范,等。
醫(yī)學(xué)教育云系統(tǒng)作為江蘇教育云的子系統(tǒng),旨在統(tǒng)一的平臺下,通過建設(shè)和整合富有特色的數(shù)字化醫(yī)學(xué)教育資源,解決投入分散、信息孤島嚴(yán)重等問題,從而促進(jìn)基礎(chǔ)與臨床的結(jié)合,促進(jìn)醫(yī)學(xué)教育模式的轉(zhuǎn)變,促進(jìn)自主學(xué)習(xí)和資源共享,提高江蘇醫(yī)學(xué)教育的信息化水平,為江蘇教育云的建設(shè)和現(xiàn)代醫(yī)學(xué)教育改革積累經(jīng)驗(yàn)。而建設(shè)和整合數(shù)字化醫(yī)學(xué)教育資源的關(guān)鍵是統(tǒng)一的、海量的數(shù)據(jù)存儲。建設(shè)中我們選擇基于Hadoop來構(gòu)建底層的云存儲,該文將在虛擬機(jī)環(huán)境上搭建 Hadoop平臺,模擬實(shí)現(xiàn)教育資源的云端傳輸和存儲。
云存儲是指通過集群應(yīng)用、網(wǎng)格技術(shù)或分布式文件系統(tǒng)等功能,將網(wǎng)絡(luò)中大量不同類型的存儲設(shè)備通過應(yīng)用軟件集合起來協(xié)同工作,共同對外提供數(shù)據(jù)存儲和業(yè)務(wù)訪問功能的一個系統(tǒng)。醫(yī)學(xué)教育云系統(tǒng)其實(shí)就是一個以數(shù)據(jù)存儲和管理為主的云儲存系統(tǒng)。
云存儲相對于傳統(tǒng)的教學(xué)資源存儲方式主要具有如下優(yōu)點(diǎn):
①硬件冗余:云存儲通過將文件復(fù)制并且存在不同的服務(wù)器,解決了潛在的單臺硬件損壞的問題。云存儲知道文件存放的位置,在硬件發(fā)生損壞時,系統(tǒng)會自動將讀寫指令導(dǎo)向存放在另一臺存儲服務(wù)器上的文件,保持服務(wù)的繼續(xù)[1]。
②擴(kuò)展性:云存儲的擴(kuò)容非常簡單,分配給每個項(xiàng)目的存儲容量可以超過實(shí)際的存儲容量。例如:硬盤總?cè)萘恐挥?00TB,系統(tǒng)卻可以設(shè)置200TB 甚至300TB 的容量給項(xiàng)目使用,等到100TB快用完時,再采購服務(wù)器即可。
③存儲效率:云存儲會將工作量均勻分配到不同的存儲服務(wù)器,避免個別存儲服務(wù)器工作量過大造成瓶頸,以使得存儲系統(tǒng)發(fā)揮最大效能。
④可靠性:因?yàn)榈统杀镜拇鎯υO(shè)備損耗率很高,某個設(shè)備發(fā)生故障需要工作人員及時處理,但是云存儲把數(shù)據(jù)備份到了多個硬件設(shè)備,當(dāng)某一個設(shè)備發(fā)生故障時,并不影響用戶的正常使用[2]。
⑤管理性:將數(shù)字化教育資源統(tǒng)一存儲在云中,方便教育資源的管理,可以節(jié)省人力和物力。
整合數(shù)字化教育資源需要考慮使用何種云平臺。目前主流的云平臺有:AbiCloud(Abiquo公司)、Had- oop(Apache基金會)、微軟的Azure平臺、谷歌的Google AppEngine、Amazon的EC2、阿里巴巴的阿里云和中國移動的BigCloud,等。
該項(xiàng)目選擇使用Hadoop平臺。主要因?yàn)镠adoop帶有用Java語言編寫的框架,Java由于跨平臺的特點(diǎn),適合運(yùn)行在Linux生產(chǎn)平臺上。并且Hadoop平臺是開源框架,有大量的資源可供參考。
Hadoop實(shí)際上是一個分布式系統(tǒng)基礎(chǔ)架構(gòu),用戶可以在不了解分布式底層細(xì)節(jié)的情況下,開發(fā)分布式程序,充分利用集群的高速運(yùn)算和存儲。Hadoop的核心是HDFS、MapReduce 和HBase。該文主要用到的是HDFS存儲系統(tǒng),所以在這里簡要介紹HDFS。
分布式文件系統(tǒng)(hadoop distributed file system,HDFS)可以部署在廉價的硬件之上,能夠高容錯,可靠的存儲海量數(shù)據(jù)(可以達(dá)到TB甚至PB級別)。它可以和MapReduce編程模型很好的結(jié)合,能夠?yàn)閼?yīng)用程序提供高吞吐量的數(shù)據(jù)訪問,適用于大數(shù)據(jù)集應(yīng)用程序。HDFS文件系統(tǒng)具有以下幾個特點(diǎn):
①HDFS認(rèn)為硬件錯誤不是異常,而是常態(tài)。HD- FS是由成百上千臺廉價的計算機(jī)構(gòu)成的,某臺計算機(jī)出現(xiàn)故障是不可避免的。每一個部分都可能出錯,HDFS的故障檢測和快速自動恢復(fù)是它的一個重要特點(diǎn)。
②支持超大規(guī)模的數(shù)據(jù)集。HDFS上的文件大小從幾GB到幾TB,甚至到PB級別。
③HDFS具有良好的平臺可移植性。HDFS由Ja- va語言實(shí)現(xiàn),可以運(yùn)行在各種Linux、Windows等平臺上,具有很好的可移植性。
④HDFS容錯能力很強(qiáng)。HDFS設(shè)計成可靠地在集群中的機(jī)器之間存儲非常大量的文件,它以塊序列的形式存儲每一個文件。這些塊為了故障容錯而被復(fù)制成多份(一般為三份)。
⑤HDFS簡化了文件訪問模型。當(dāng)一個文件創(chuàng)建、寫入并關(guān)閉后就不能修改了,這樣就提高了吞吐量,減少了對文件的修改,增加了文件的一致性。
⑥數(shù)據(jù)訪問性能的提高。HDFS的設(shè)計主要考慮到數(shù)據(jù)的批處理,這樣數(shù)據(jù)就不會在網(wǎng)絡(luò)上造成堵塞,提高吞吐量、節(jié)約收發(fā)數(shù)據(jù)的時間。
⑦具有很強(qiáng)的可擴(kuò)展性。當(dāng)HDFS中的節(jié)點(diǎn)需要退出或者增加的時候,這些行為并不會影響用戶的正常使用。
⑧HDFS源代碼開放,有利于全球的開發(fā)者進(jìn)行研究探討。
HDFS的系統(tǒng)架構(gòu)屬于典型的主從架構(gòu)[3],HDFS集群由一個NameNode和很多個DataNode組成。Name- Node是主控制服務(wù)器,負(fù)責(zé)維護(hù)文件系統(tǒng)的命名空間(Namespace)并協(xié)調(diào)客戶端對文件的訪問,記錄命名內(nèi)的任何改動或命名空間本身的屬性改動。Data- Node負(fù)責(zé)他們所在的物理節(jié)點(diǎn)上的存儲管理,HDFS的文件通常是按照64MB被切分成不同的數(shù)據(jù)塊(Bl- ock),每個數(shù)據(jù)塊盡可能的分散存儲于不同的Data- Node中??蛻舳寺?lián)系NameNode以獲取文件的元數(shù)據(jù),而真正的文件輸入輸出操作是直接和DataNode進(jìn)行交互的。圖1是HDFS結(jié)構(gòu)示意圖。例如客戶端要訪問一個文件,首先客戶端從Name Node獲得組成文件數(shù)據(jù)塊的位置列表,也就是知道數(shù)據(jù)塊被存儲在哪些DataNode上,然后客戶端直接從DataNode上讀取文件數(shù)據(jù)。
圖1 HDFS結(jié)構(gòu)示意圖
HDFS典型的部署是在一個專門的機(jī)器上運(yùn)行NameNode,集群中的其他機(jī)器各運(yùn)行一個 DataNode。NameNode使用事務(wù)日志(EditLog)記錄HDFS元數(shù)據(jù)的變化,使用映像文件(FsImage)存儲文件系統(tǒng)的命名空間,包括文件的映射和文件的屬性信息等[4]。事務(wù)日志和映像文件都存儲在NameNode的本地文件系統(tǒng)。HDFS還有Secondary NameNode節(jié)點(diǎn),它輔助Name- Node處理映像文件和事務(wù)日志,Secondary NameNode會周期的從NameNode復(fù)制映像文件和事務(wù)日志到臨時目錄,合并生成新的映像文件后再上傳到Name- Node。NameNode啟動時,從磁盤中讀取映像文件和事務(wù)日志,把事務(wù)日志的事物都應(yīng)用到內(nèi)存中的映像文件上,然后將新的元數(shù)據(jù)刷新到本地磁盤新的映像文件中。
Hadoop平臺的搭建需要五步:集群網(wǎng)絡(luò)環(huán)境的選擇、SSH無密碼驗(yàn)證配置、JDK安裝和Java 環(huán)境變量配置、Hadoop集群配置和 Hadoop集群啟動。下面簡單介紹一下Hadoop平臺的搭建過程。
3.1 集群網(wǎng)絡(luò)環(huán)境
在vmware虛擬機(jī)上模擬Hadoop集群網(wǎng)絡(luò)環(huán)境,集群包含兩個節(jié)點(diǎn):1個NameNode(master)和1個DataNode(slave)。操作系統(tǒng)為CentOS6.2,Hadoop版本是0.21.0,JDK的版本是1.6。在兩個節(jié)點(diǎn)的/etc/hosts文件中添加主機(jī)名和相應(yīng)的 IP 地址。
3.2 SSH無密碼驗(yàn)證配置
Hadoop需要使用SSH協(xié)議,NameNode使用SSH無密碼登錄并啟動DataNode進(jìn)程。同樣原理,Data- Node上也能使用SSH無密碼登錄到NameNode(這樣也能在DataNode上進(jìn)行啟動或關(guān)閉 Hadoop)。
3.2.1 配置NameNode無密碼登錄所有DataNode
NameNode作為客戶端,要實(shí)現(xiàn)無密碼公鑰認(rèn)證,連接到服務(wù)端DataNode上時,需要在NameNode上生成一個密鑰對,包括一個公鑰和一個私鑰,而后將公鑰復(fù)制到DataNode上。當(dāng)NameNode通過ssh連接DataNode時,DataNode就會生成一個隨機(jī)數(shù),并用NameNode的公鑰對隨機(jī)數(shù)進(jìn)行加密,并發(fā)送給NameNode。Name- Node收到加密數(shù)之后再用私鑰進(jìn)行解密,并將解密數(shù)回傳給DataNode,DataNode確認(rèn)解密無誤之后就允許NameNode進(jìn)行連接。這就是一個公鑰認(rèn)證過程,期間不需要用戶手工輸入密碼。重要過程是將客戶端NameNode公鑰復(fù)制到Data Node上。
3.2.2 配置DataNode無密碼登錄NameNode
和Name- Node無密碼登錄所有DataNode原理一樣,把Data- Node的公鑰復(fù)制到NameNode的.ssh 目錄下。
至此,NameNode能無密碼驗(yàn)證登陸每個Data- Node,每個DataNode也能夠無密碼驗(yàn)證SSH登陸到NameNode。
3.3 JDK安裝和Java環(huán)境變量配置3.3.1 CentOS下安裝JDK 1.6
從SUN下載jdk-6u45-linux-i586-rpm.bin,在/usr下新建java文件夾,將安裝包放在/usr/java目錄下。在集群所有的機(jī)器上安裝JDK 1.6。
3.3.2 Java環(huán)境變量配置
在/etc/profile中配置JAVA_HOME、JRE_HOME、CLASSPATH、PATH等環(huán)境變量,并執(zhí)行命令使配置生效:source /etc/profile。
3.4 Hadoop集群配置3.4.1 下載hadoop-0.20.0.tar.gz
在NameNode上下載hadoop-0.21.0.tar.gz,解壓到/home/hadoop/目錄下,在hadoop目錄下創(chuàng)建tmp文件夾并把hadoop的安裝路徑HADOOP_HOME添加到/etc/profile中,并使其生效。
3.4.2 編輯Hadoop的配置文件
配置/home/had- oop/hadoop-0.21.0/conf/hadoop-env.sh文件,末尾加入以下語句:
# set java environment
export JAVA_HOME=/usr/java/jdk1.6.0_45/
配置/home/hadoop/hadoop-0.21.0/conf/coresite.xml文件:
配置/home/hadoop/hadoop-0.21.0/conf/hdfs-site.xml文件:
配置/home/hadoop/hadoop-0.21.0/conf/mapredsi-te.xml文件:
在/home/hadoop/hadoop-0.21.0/conf/masters中加入NameNode的ip地址,在/home/hadoop/hadoop-0.21.0/conf/slaves中加入所有DataNode的ip地址。
將NameNode上配置好的hadoop文件夾復(fù)制到DataNode的/home/目錄下,Hadoop配置完成。
3.5 Hadoop集群啟動
在NameNode上啟動Hadoop。首先通過hadoop namenode-format命令格式化Hadoop,再輸入 start-all.sh命令啟動Hadoop。
Hadoop啟動時首先啟動NameNode,接著啟動Data- Node。啟動Hadoop成功后,在NameNode中的tmp文件夾中生成了dfs文件夾,在DataNode中的tmp文件夾中生成了dfs文件夾和mapred文件夾。
在NameNode上輸入命令hadoop dfsadmin-rep-ort來查看集群狀態(tài),包括NameNode存儲空間的使用情況和配置情況,DataNode的IP和端口號,以及dfs的使用情況。Hadoop平臺至此搭建完成。
高校先將數(shù)據(jù)發(fā)送到云存儲系統(tǒng)中,當(dāng)用戶需要從教育云系統(tǒng)中獲得自己所需要的信息時,先從云存儲中通過NameNode找到相應(yīng)Block的ID,再根據(jù)Blo- ck的ID獲得自己所需要的數(shù)據(jù)。
寫操作時,高校作為Client向NameNode發(fā)送寫數(shù)據(jù)請求,將數(shù)據(jù)劃分為多個Block,每個Block的大小為64MB。NameNode返回可用的DataNode信息,把數(shù)據(jù)發(fā)送給DataNode保存,并且備份(默認(rèn)是三份)。NameNode記錄數(shù)據(jù)的Block編號,保存在映像文件中。然后由事務(wù)日志記錄數(shù)據(jù)變化的情況,由Secondary NameNode對NameNode中的元數(shù)據(jù)進(jìn)行備份,保存最新的事務(wù)日志和映射文件,并且把它更新在Name- Node中(如圖2所示)。
圖2 寫操作
讀操作時,Client向NameNode發(fā)送讀請求,Name- Node根據(jù)映射文件找到相應(yīng)Block編號發(fā)給Client,用戶再把這個編號發(fā)送給DataNode,DataNode根據(jù)編號找到Block之后,把數(shù)據(jù)發(fā)給Client(如圖3所示)。
圖3 讀操作
我們在搭建好的Hadoop平臺上簡單測試HDFS文件系統(tǒng)的數(shù)據(jù)讀寫。“hadoop dfsput 源文件目標(biāo)文件”將本地文件復(fù)制到HDFS文件系統(tǒng)中,“hadoop dfs-get源文件目標(biāo)文件”將HDFS文件系統(tǒng)中的文件復(fù)制到本地。高校向教育云系統(tǒng)讀寫數(shù)據(jù)會比這個復(fù)雜,但是基本原理相同。
教育云系統(tǒng)的建設(shè)主要是為整合分散在各高校的數(shù)字資源,在Hadoop平臺和框架下維護(hù)和管理資源,使得教學(xué)資源的利用更為合理和高效。同時各高校也節(jié)省了存儲資源,減少了數(shù)據(jù)維護(hù)和軟件更新的費(fèi)用,不用再擔(dān)心數(shù)據(jù)備份等問題。
生產(chǎn)環(huán)境中我們使用Struts框架、Tomcat服務(wù)器、java和jsp基于Hadoop平臺來設(shè)計教育云系統(tǒng)主網(wǎng)站(如圖4所示)。
圖4 醫(yī)學(xué)教育云系統(tǒng)網(wǎng)站
Hadoop中關(guān)于文件操作類基本上是在org.apa- che.hadoop.fs包中,這些API能夠支持打開、刪除、讀寫文件等操作。Hadoop類庫中最終面向用戶提供的接口類是FileSystem,通過該類的get方法得到具體類,該類封裝了幾乎所有的文件操作,例如:mkdir,del- ete,等。操作文件的程序庫框架如下:
operator()
{
得到Configuration對象
得到FileSystem對象
進(jìn)行文件操作
}
各高校的網(wǎng)絡(luò)管理人員登錄到系統(tǒng),負(fù)責(zé)更新和維護(hù)該校的資源信息,有上傳、刪除、修改等權(quán)限,資源按發(fā)布時間的先后順序排列。
網(wǎng)站上主要整合各高校的影像、病理、檢驗(yàn)、病案、精品課程等數(shù)字資源。師生在獲取資源時,不需要到
Construction methods of education cloud storage system based on Hadoop platform
ChenWei
CenterofInformationandNetwork,NanjingMedicalUniversity,Nanjing210029,China
University teaching resources construction is an important part of network-assisted teaching. This paper mainly studies the application of cloud storage to college teaching resources sharing, in the purpose of reducing the cost of college teaching resources construction and maintenance. It also briefly introduces the construction of Hadoop platform and key technology involved.
cloud storage; Hadoop; data transmission
南京醫(yī)科大學(xué)科技發(fā)展基金“云計算IaaS模式數(shù)據(jù)中心的構(gòu)建與研究”(2013NJMU034)
2014-09-09
陳偉(1978-),男,江蘇海安人,碩士,實(shí)驗(yàn)師,主要研究方向:教育技術(shù)。
G434
A
1004-5287(2015)01-0029-04【DOI】:10.13566/j.cnki.cmet.cn61-1317/g4.201501009