賀釋千,張海濤,李密生,王玉清
(河北科技師范學(xué)院 數(shù)學(xué)與信息科技學(xué)院,河北 秦皇島066004)
Linux是一個免費開源的操作系統(tǒng),不但可以勝任各類服務(wù)器,而且具有強大的網(wǎng)絡(luò)功能。因為這樣的優(yōu)點,使得它在很多領(lǐng)域有著廣泛的應(yīng)用,如服務(wù)器、路由器以及各種嵌入式設(shè)備等。
很多云計算相關(guān)技術(shù)的應(yīng)用也是在Linux系統(tǒng)下完成的,例如美國加州大學(xué)伯克利分校 (UC Berkeley AMP lab)開發(fā)的Spark計算引擎,它是為專門處理大規(guī)模數(shù)據(jù)而設(shè)計的云計算技術(shù)[1]。Spark可以整合多臺服務(wù)器資源成為服務(wù)器集群,然后將統(tǒng)一的計算資源向用戶提供服務(wù)[2]。Spark不只是被廣泛應(yīng)用于機器學(xué)習(xí)領(lǐng)域[3],在社交網(wǎng)絡(luò)分析領(lǐng)域也有廣泛應(yīng)用如社區(qū)發(fā)現(xiàn)算法[4][5],另外還被應(yīng)用在空間地理數(shù)據(jù)存儲與計算等領(lǐng)域[6][7]。所以Spark有很好的應(yīng)用前景。需要強調(diào)的是Spark的開發(fā)和測試都是在Linux環(huán)境下進行的。雖然目前Spark能勉強在其他操作系統(tǒng)上運行,但使用中存在諸多問題,出于系統(tǒng)穩(wěn)定性考慮,無論是商業(yè)應(yīng)用還是科研工作,大都是將Spark部署在Linux上運行,Spark的編程也就需要在Linux下完成,因此應(yīng)當(dāng)在Linux課程中講解Spark。
不同專業(yè)對于Linux教學(xué)有著不同的側(cè)重點,如網(wǎng)絡(luò)工程專業(yè),教學(xué)側(cè)重點是Linux的各種網(wǎng)絡(luò)和服務(wù)的配置,計算機科學(xué)與技術(shù)專業(yè)則將Linux課程作為操作系統(tǒng)的補充,教學(xué)側(cè)重點是文件系統(tǒng)和進程管理,而云計算背景下的教學(xué)側(cè)重點是讓學(xué)生在Linux操作系統(tǒng)下學(xué)會各種云計算技術(shù)。但是目前大多數(shù)學(xué)校實驗室機器都是使用Windows系統(tǒng),這為云計算教學(xué)帶來了困難。
另外,由于Linux涉及的命令繁多、實踐性強,因此易使初學(xué)者產(chǎn)生畏難情緒,學(xué)習(xí)興趣不高。而傳統(tǒng)的單一實驗教學(xué)方式,即教師先演示,學(xué)生再練習(xí),培養(yǎng)出的學(xué)生只會簡單模仿,不會實際應(yīng)用,更缺少創(chuàng)新能力。如何對實驗的內(nèi)容進行合理的設(shè)計以及如何優(yōu)化教學(xué)方法都對教學(xué)效果有著重要的影響。
我們可以根據(jù)實際問題為出發(fā)點,針對新技術(shù)做出相應(yīng)的實驗課程改革。為了引起學(xué)生的興趣,應(yīng)當(dāng)對每一個新技術(shù)的起源和作用給予生動的講解,并且針對這個新技術(shù)帶來的新問題對學(xué)生加以引導(dǎo)和啟發(fā)。下面以Spark為例介紹如何在Linux實驗教學(xué)中使用任務(wù)驅(qū)動法進行引導(dǎo)和啟發(fā)式教學(xué)。
大數(shù)據(jù)時代數(shù)據(jù)規(guī)模急速膨脹,而一般服務(wù)器處理能力又非常有限。雖然可以使用超大型服務(wù)器處理這些數(shù)據(jù),但其造價和維護成本過高,一般公司難以承擔(dān)其費用。而云計算可以整合多臺服務(wù)器(甚至包括普通電腦)資源成為服務(wù)器集群,然后將統(tǒng)一的計算資源向用戶提供服務(wù),而Spark就是云計算中一個重要的新技術(shù)。Spark自身進行資源管理和計算,采用的是M/S結(jié)構(gòu),即Master/Slave結(jié)構(gòu)。集群中有管理者即Master節(jié)點和工作節(jié)點即Slave節(jié)點,無論哪種節(jié)點都是運行在Linux系統(tǒng)之上的,而Master節(jié)點和Slave節(jié)點除了配置文件不同外,要求安裝相同的軟件和依賴庫。由此就帶來了以下的問題:①Spark必須運行在Linux系統(tǒng)上,而且當(dāng)Spark集群中有多臺機器時,就有如何避免在多臺機器上重復(fù)裝機的問題。②Spark一般是部署在服務(wù)器上,而服務(wù)器一般是不會允許安裝集成開發(fā)環(huán)境(IED)的,那么如何進行遠程編程和管理也是一個問題。
第一個問題可以采用Docker解決。傳統(tǒng)Linux教學(xué)一般都是在虛擬機上進行,如通過VMware軟件進行虛擬機教學(xué)。但虛擬機消耗資源較多,如果進行Spark教學(xué)則需要虛擬多臺虛擬機搭建Spark集群,一般學(xué)校實驗室的電腦很難完成該任務(wù)。Docker是一個開源的應(yīng)用容器引擎,它就像一個輕型虛擬機。Docker可以像VMware一樣安裝在Windows或Linux上,但虛擬出的并不是虛擬機,而是比虛擬機更輕的容器。這個容器可以像虛擬機一樣安裝Linux系統(tǒng)。Docker運行容器的速度非??欤梢赃_到秒級,在硬件資源較好的條件下運行Docker容器就像運行一個普通軟件一樣迅速。而且Docker支持將容器打包成為鏡像,這可以極大簡化Spark的部署。
第二個問題可以采用Jupyter解決 (或多用戶版的JupyterHub)。Jupyter原來是屬于 IPython Notebook項目,它支持在瀏覽器中進行Python的編程。現(xiàn)在獨立的Jupyter支持的編程語言非常多,包括Python、R、Scala等。Jupyter只支持單用戶,如果在教學(xué)演示可以選擇多用戶版的JupyterHub。通過在Spark的管理者即Master節(jié)點上安裝Jupyter可以實現(xiàn)遠程編程和管理。
考慮到需要虛擬Spark集群 (至少一個Master節(jié)點和Slave節(jié)點),所以電腦內(nèi)存至少8G以上。軟件包括Linux 包管理器、Docker、Jupyter、Java、Python、Scala、PyS-park、Spark及其相關(guān)依賴Python的包管理器Anaconda。
設(shè)計實驗內(nèi)容應(yīng)遵循學(xué)習(xí)規(guī)律從易到難、由淺入深并結(jié)合實踐。據(jù)實驗內(nèi)容不同可以將其分為驗證性、設(shè)計性和綜合性實驗三類。
(1)驗證性實驗
Spark是由運行在Java虛擬機上的第三方語言Scala語言編寫,因此在安裝Spark時需要先安裝Java。Spark支持Scala、R、Java和Python四種語言調(diào)用,商業(yè)上為了加快開發(fā)一般采用Python通過PySpark調(diào)用Spark(PySpark是Spark官方提供的Python API接口)?,F(xiàn)在由于云計算和人工智能的興起,一般學(xué)校都新開設(shè)了Python課程,這部分的實驗應(yīng)包括安裝和簡單配置Docker、Java、Python、Spark 以及 Jupyer,其目的是加深對所學(xué)知識的理解,熟練掌握一些基本的操作規(guī)范和操作技能,鍛煉學(xué)生的動手能力。實驗之前,教師要給學(xué)生布置預(yù)習(xí)任務(wù),提出具體要求。實驗過程中,教師先講解相關(guān)知識,給出詳細方法和步驟,之后演示操作,再讓學(xué)生自己動手操作,教師進行現(xiàn)場指導(dǎo),最后讓一些學(xué)生上臺進行實驗演示,遇到問題師生之間、學(xué)生之間可以互相討論,這樣活躍課堂氣氛,調(diào)動學(xué)生學(xué)習(xí)的興趣,加深對所學(xué)知識的印象,對于做得好的學(xué)生,教師及時表揚鼓勵,增強學(xué)生學(xué)習(xí)的自信心和成就感。
(2)設(shè)計性實驗
Spark集群至少包涵一個Master節(jié)點以及多個Slave節(jié)點,這些集群中每個節(jié)點如何分配IP、端口以及計算資源配額,可以通過Docker和Spark的配置文件進行設(shè)置,雖然每項的配置都很簡單,但如何通過設(shè)計和平衡Spark集群每個節(jié)點的計算壓力是重點。這部分實驗為Spark集群規(guī)劃,應(yīng)包括分配IP、端口以及計算資源配額等。通過這部分實驗進一步提升實驗?zāi)芰?,?cè)重于解決問題能力培養(yǎng),包括系統(tǒng)分析與設(shè)計能力。實驗過程中教師要充分發(fā)揮學(xué)生的主體作用,激發(fā)學(xué)生學(xué)習(xí)的積極性和主動性[8],讓學(xué)生自己對系統(tǒng)進行分析和設(shè)計,遇到問題時教師可以提供一個解決問題的思路,最終讓學(xué)生通過學(xué)習(xí)學(xué)會解決問題。
(3)綜合性實驗
面向就業(yè)崗位的技術(shù)需求而設(shè)計的實驗,是對已學(xué)過知識的綜合應(yīng)用。通過這部分實驗培養(yǎng)學(xué)生分析問題、解決問題的能力以及創(chuàng)造性能力等綜合能力。例如,根據(jù)需求分析設(shè)計出一份Spark的部署方案,然后根據(jù)方案編寫shell腳本,完成Spark的自動化安裝和部署任務(wù)。具體做法是:首先對學(xué)生分組,教師按組分配任務(wù),各組長負責(zé)分析任務(wù)提出部署方案,并將任務(wù)分解后分配給組員。帶著任務(wù)學(xué)習(xí)能夠充分發(fā)揮學(xué)生的主體作用,激發(fā)學(xué)習(xí)的興趣。在完成任務(wù)的過程中,既培養(yǎng)了學(xué)生獨立分析問題、解決問題的能力和創(chuàng)新能力,也培養(yǎng)了團隊協(xié)作能力和與人溝通的能力。任務(wù)結(jié)束后教師要進行總結(jié),對于任務(wù)完成好的小組要給與肯定,對于任務(wù)完成不好的小組要幫助其查找原因。
對基于Spark云計算技術(shù)的Linux實驗教學(xué),采用以實際問題為導(dǎo)向的實驗教學(xué)模式,能夠很好地將Spark在Linux上使用的特點和學(xué)生就業(yè)所需技能深度融合,調(diào)動了學(xué)生學(xué)習(xí)的積極性,使學(xué)生的分析問題能力、解決問題能力和創(chuàng)新能力以及團隊協(xié)作能力都得到了明顯提升。對于本門課程,筆者只是進行了簡單的探索和嘗試,如何進一步提高該課程的教學(xué)質(zhì)量,還有待今后不斷的實踐和改進。