梁 晶,胡新榮
(武漢紡織大學(xué) 數(shù)學(xué)與計(jì)算機(jī)學(xué)院,湖北 武漢 430073)
隨著獲批“大數(shù)據(jù)與數(shù)據(jù)科學(xué)”專業(yè)數(shù)量和學(xué)生人數(shù)的快速增長(zhǎng),迫切需要加快厘清大數(shù)據(jù)相關(guān)課程的課程體系,規(guī)范教學(xué)內(nèi)容,建設(shè)相應(yīng)的實(shí)驗(yàn)環(huán)境。目前,大數(shù)據(jù)教學(xué)案例還不夠豐富,課程體系建設(shè)還有待完善,有些課程的設(shè)置不能緊密跟隨大數(shù)據(jù)的步伐,使得教學(xué)內(nèi)容和形式還比較滯后[1]。從實(shí)踐教學(xué)的教學(xué)過(guò)程和反饋來(lái)看,大數(shù)據(jù)技術(shù)課程、云計(jì)算技術(shù)等都具備較強(qiáng)的應(yīng)用性和綜合性特征,學(xué)生往往反映實(shí)踐難度較大[2]。
Hadoop 作為開(kāi)源的大數(shù)據(jù)平臺(tái),其分布式文件系統(tǒng)HDFS 和分布式計(jì)算框架MapReduce是大數(shù)據(jù)課程教學(xué)和企業(yè)大數(shù)據(jù)應(yīng)用中的重要內(nèi)容。Hadoop 系統(tǒng)可以作為單獨(dú)的一門(mén)課程,也可穿插在并行計(jì)算、自然語(yǔ)言處理、數(shù)據(jù)挖掘或者云計(jì)算等課程中講解[3]。
Hadoop 課程教學(xué)內(nèi)容主要是分布式存儲(chǔ)和分布式計(jì)算,其教學(xué)目標(biāo)是讓學(xué)生掌握以下幾點(diǎn)內(nèi)容:①理解計(jì)算與存儲(chǔ)分離的架構(gòu)在面向數(shù)據(jù)密集型計(jì)算時(shí)的缺陷,領(lǐng)會(huì)并行和分布式計(jì)算架構(gòu)在可擴(kuò)展性方面的優(yōu)勢(shì);②掌握大數(shù)據(jù)存儲(chǔ)和計(jì)算的特點(diǎn)以及所需要的技術(shù),熟練使用HDFS 和MapReduce 編程;③理解HDFS 和MapReduce 在可擴(kuò)展性和性能方面的特點(diǎn),為進(jìn)一步學(xué)習(xí)其他分布式計(jì)算框架打下基礎(chǔ)[3-4]。在文獻(xiàn)[1]和[2]中均描述了大數(shù)據(jù)課程的課程體系,Hadoop 課程涉及的分布式存儲(chǔ)概念和分布式編程方法在大數(shù)據(jù)專業(yè)的整個(gè)課程體系中處于承上啟下的中心位置。在Hadoop 課程的實(shí)踐環(huán)節(jié)中,學(xué)生需要靈活運(yùn)用操作系統(tǒng)、Linux 系統(tǒng)編程、面向?qū)ο蟪绦蛟O(shè)計(jì)和Java 語(yǔ)言編程等前導(dǎo)課程的知識(shí),有一定的綜合性。同時(shí),由于大數(shù)據(jù)課程的教材建設(shè)時(shí)間較短,不同的Hadoop開(kāi)發(fā)教材中實(shí)踐教學(xué)內(nèi)容有一定差異,受制于教材篇幅也很難在一本教材中展現(xiàn)實(shí)踐教學(xué)的全部?jī)?nèi)容。因此,筆者對(duì)Hadoop 課程中涉及的實(shí)踐教學(xué)內(nèi)容進(jìn)行了一些整理,選取了Hadoop 課程核心的實(shí)踐教學(xué)內(nèi)容,其主要包括Hadoop 系統(tǒng)安裝和配置、Hadoop 系統(tǒng)的基本操作、HDFS 編程、MapReduce 編程和綜合應(yīng)用等幾個(gè)部分,具體內(nèi)容見(jiàn)表1。
表1 中列舉的24 個(gè)學(xué)時(shí)實(shí)驗(yàn)涵蓋了Hadoop系統(tǒng)的主要實(shí)踐教學(xué)內(nèi)容,在大數(shù)據(jù)工程應(yīng)用中還包含數(shù)據(jù)轉(zhuǎn)換、導(dǎo)入、清洗和數(shù)據(jù)展示等內(nèi)容,實(shí)際教學(xué)過(guò)程中可以根據(jù)培養(yǎng)目標(biāo)、學(xué)生接受程度、學(xué)時(shí)安排和實(shí)驗(yàn)條件等因素適當(dāng)調(diào)整??梢詫⒁徊糠謱?shí)踐教學(xué)內(nèi)容作為實(shí)驗(yàn)任務(wù),亦可以作為課堂練習(xí)或者課后作業(yè),也可以如文獻(xiàn)[2]描述將一部分實(shí)踐教學(xué)內(nèi)容穿插到其他相關(guān)課程中進(jìn)行。
表1 Hadoop 實(shí)踐教學(xué)內(nèi)容
從表1 中還可以看出,MapReduce 編程是Hadoop 系統(tǒng)實(shí)踐教學(xué)的主要內(nèi)容,也是學(xué)生學(xué)習(xí)的難點(diǎn),這個(gè)部分可以結(jié)合PPT 講解、視頻教學(xué)和理實(shí)一體化教學(xué)等多種教學(xué)方式,確保學(xué)生深入理解和消化實(shí)驗(yàn)中涉及的相關(guān)知識(shí)。
大數(shù)據(jù)任務(wù)的主要特點(diǎn)就是數(shù)據(jù)容量大(Volume),同時(shí)又對(duì)時(shí)效性(Velocity)有較高的要求。數(shù)據(jù)集的大小和構(gòu)成是選擇計(jì)算平臺(tái)的主要因素,對(duì)學(xué)生來(lái)說(shuō),學(xué)會(huì)分辨一個(gè)數(shù)據(jù)處理任務(wù)是通過(guò)傳統(tǒng)的方法處理,還是需要使用大數(shù)據(jù)平臺(tái)來(lái)處理是一個(gè)重要的能力[5]。文獻(xiàn)[4—6]中介紹了一些國(guó)外大學(xué)教學(xué)中使用的數(shù)據(jù)集,其中一部分見(jiàn)表2。
表2 部分?jǐn)?shù)據(jù)集
在實(shí)踐教學(xué)過(guò)程中,實(shí)驗(yàn)數(shù)據(jù)集的選擇既要凸顯大數(shù)據(jù)的特點(diǎn),又要兼顧實(shí)驗(yàn)學(xué)時(shí)和實(shí)驗(yàn)條件的限制。針對(duì)數(shù)據(jù)集選擇方面可參考以下幾方面。
(1)實(shí)驗(yàn)中使用的數(shù)據(jù)集大小宜控制在1 000萬(wàn)至2 000 萬(wàn)條。數(shù)據(jù)量過(guò)小的數(shù)據(jù)集學(xué)生使用Excel 或者M(jìn)ysql 數(shù)據(jù)庫(kù)就可以處理,無(wú)法凸顯出分布式存儲(chǔ)和分布式計(jì)算的優(yōu)勢(shì)。反之如果數(shù)據(jù)量過(guò)大,由于實(shí)驗(yàn)室分配到每個(gè)學(xué)生的存儲(chǔ)和計(jì)算資源有限,一方面HDFS 中dfs.replication 的配置會(huì)導(dǎo)致存儲(chǔ)空間占用較多,另一方面會(huì)運(yùn)算時(shí)間較長(zhǎng),在有限的實(shí)踐教學(xué)時(shí)間內(nèi)難以完成。
(2)數(shù)據(jù)集選取應(yīng)盡量貼近實(shí)際應(yīng)用,即數(shù)據(jù)集中的數(shù)據(jù)應(yīng)選取真實(shí)的、有分析價(jià)值的數(shù)據(jù)。實(shí)際應(yīng)用中產(chǎn)生的數(shù)據(jù)有較強(qiáng)的多樣性(Variety),包含結(jié)構(gòu)化和非結(jié)構(gòu)化數(shù)據(jù),其中既蘊(yùn)藏了客觀規(guī)律,又可能含有噪聲數(shù)據(jù),這些不確定性避免了實(shí)驗(yàn)結(jié)果千篇一律,有利于激發(fā)學(xué)生自主探索的熱情,提高學(xué)習(xí)積極性。
(3)在課內(nèi)實(shí)踐學(xué)時(shí)有限的情況下,教師教學(xué)可以選用一兩個(gè)有代表性的數(shù)據(jù)集來(lái)完成HDFS 和MapReduce 編程實(shí)踐的主要教學(xué)內(nèi)容。復(fù)雜數(shù)據(jù)集的預(yù)處理和分析計(jì)算需要更多時(shí)間,可以在課后作業(yè)或者課程設(shè)計(jì)中使用。如筆者在教學(xué)中使用了1 000 萬(wàn)條的user_login 作為數(shù)據(jù)集,內(nèi)容僅包含某網(wǎng)站的用戶名稱和用戶登錄時(shí)間,基于該數(shù)據(jù)集設(shè)計(jì)了WordCount、去重和排序、二次排序、自定義鍵值等實(shí)驗(yàn),目的是在有限的課堂學(xué)時(shí)內(nèi)讓學(xué)生專注于掌握Hadoop 的計(jì)算架構(gòu),提高教學(xué)效率。
(4)要求學(xué)生在課后和課程設(shè)計(jì)中自行準(zhǔn)備合適的數(shù)據(jù)集,鼓勵(lì)學(xué)生使用自己的數(shù)據(jù)集完成實(shí)驗(yàn)內(nèi)容。例如,在排序和自定義鍵值的實(shí)驗(yàn)中,筆者要求學(xué)生提前下載noaa 全球氣象數(shù)據(jù)集(https://www1.ncdc.noaa.gov/pub/data/gsod/),完成數(shù)據(jù)預(yù)處理和數(shù)據(jù)清洗,也有一部分同學(xué)通過(guò)政府開(kāi)放數(shù)據(jù)平臺(tái)data.gov 下載了其他感興趣的數(shù)據(jù)作為數(shù)據(jù)集。這樣既能有效增加數(shù)據(jù)集的多樣性,又能讓學(xué)生在實(shí)踐過(guò)程中充分發(fā)揮自主能動(dòng)性。
在條件允許的情況下,學(xué)??梢酝ㄟ^(guò)與國(guó)內(nèi)互聯(lián)網(wǎng)公司合作獲取TB 或者PB 級(jí)的數(shù)據(jù)集,如零售、餐飲行業(yè)的數(shù)據(jù)等。學(xué)生通過(guò)對(duì)這些海量數(shù)據(jù)中蘊(yùn)藏的規(guī)律進(jìn)行探索和分析能夠大大提高學(xué)生的學(xué)習(xí)興趣,增強(qiáng)工程實(shí)踐能力。
由于國(guó)內(nèi)大數(shù)據(jù)專業(yè)開(kāi)設(shè)的時(shí)間較短,各學(xué)校在實(shí)驗(yàn)平臺(tái)建設(shè)方面還處于摸索階段,如何兼顧不同的大數(shù)據(jù)相關(guān)課程在實(shí)踐教學(xué)內(nèi)容、教學(xué)資源和資金投入方面的要求,仍面臨較大的挑戰(zhàn)。
在實(shí)踐平臺(tái)的建設(shè)和選擇方面,在已經(jīng)開(kāi)設(shè)了Hadoop 相關(guān)課程的國(guó)內(nèi)外大學(xué)中有一些成功的經(jīng)驗(yàn)可以借鑒。文獻(xiàn)[7]中采用了亞馬遜的EC2 商業(yè)大數(shù)據(jù)環(huán)境作為Hadoop 的實(shí)踐教學(xué)平臺(tái),因此需要考慮每次實(shí)驗(yàn)時(shí)長(zhǎng)產(chǎn)生的費(fèi)用開(kāi)銷。文獻(xiàn)[8]列舉了國(guó)內(nèi)的商業(yè)大數(shù)據(jù)運(yùn)行環(huán)境,提出了通過(guò)私有云和物理機(jī)混合組建大數(shù)據(jù)計(jì)算平臺(tái)的方法。文獻(xiàn)[9]和[10]闡述了通過(guò)Docker 構(gòu)建彈性大數(shù)據(jù)實(shí)驗(yàn)環(huán)境的方法。文獻(xiàn)[3]中總結(jié)了4 種在教學(xué)中經(jīng)常使用的Hadoop MapReduce 計(jì)算平臺(tái)。
(1)通過(guò)WebMapReduce Tool 提供的Web頁(yè)面提交MapReduce 計(jì)算任務(wù),適合對(duì)編程能力要求不高的場(chǎng)合。
(2)通過(guò)用戶賬戶在共享的Hadoop 集群上提交計(jì)算任務(wù),Hadoop 集群通過(guò)作業(yè)批處理依次運(yùn)行各個(gè)用戶提交的任務(wù)。
(3)在Linux 集群上通過(guò)虛擬化生成很多運(yùn)行Hadoop 集群的虛擬機(jī),每個(gè)學(xué)生在自己的Hadoop 虛擬機(jī)上執(zhí)行計(jì)算任務(wù)。
(4)在云環(huán)境下,學(xué)生通過(guò)分配到的資源創(chuàng)建私有的Hadoop 集群完成計(jì)算任務(wù)。
通過(guò)上述資料可以看出,各個(gè)學(xué)校選擇的Hadoop 實(shí)踐教學(xué)平臺(tái)搭建形式和使用方法不盡相同,需要綜合考慮各方面因素,相應(yīng)的實(shí)踐教學(xué)手段和教學(xué)方法也稍有差異。
結(jié)合目前國(guó)內(nèi)高校中的實(shí)際應(yīng)用情況,Hadoop 實(shí)踐教學(xué)過(guò)程中各個(gè)平臺(tái)的特點(diǎn)如下。
(1)通過(guò)商業(yè)云環(huán)境搭建Hadoop 實(shí)踐環(huán)境,或者通過(guò)與互聯(lián)網(wǎng)公司合作共建大數(shù)據(jù)實(shí)訓(xùn)環(huán)境。這種方法的優(yōu)勢(shì)是實(shí)踐平臺(tái)與企業(yè)實(shí)際應(yīng)用環(huán)境高度一致,容易獲取高質(zhì)量的實(shí)訓(xùn)軟件和訓(xùn)練數(shù)據(jù)集,有利于學(xué)生創(chuàng)業(yè)和就業(yè),同時(shí)實(shí)驗(yàn)室也省去了維護(hù)成本。缺點(diǎn)是商業(yè)云環(huán)境每年都需要一定的費(fèi)用開(kāi)銷。
(2)通過(guò)Linux 服務(wù)器集群和Docker 構(gòu)建彈性大數(shù)據(jù)實(shí)踐環(huán)境。這種方式是目前國(guó)內(nèi)大數(shù)據(jù)教學(xué)平臺(tái)提供商推薦較多的環(huán)境。其優(yōu)勢(shì)是提供彈性的云服務(wù),適合動(dòng)態(tài)擴(kuò)容,能夠根據(jù)實(shí)踐教學(xué)需要靈活定制不同課程需要的環(huán)境,通過(guò)一次性投入可以滿足多種課程的教學(xué)需要。這種實(shí)驗(yàn)條件下可以運(yùn)行Hadoop 完全分布式環(huán)境,貼近生產(chǎn)實(shí)際。缺點(diǎn)是一次性投入較大,而且分配到每個(gè)學(xué)生的Linux 服務(wù)器集群資源有限,在設(shè)計(jì)時(shí)要準(zhǔn)確估計(jì)并發(fā)的虛擬機(jī)節(jié)點(diǎn)數(shù)量和資源需求,安排上機(jī)時(shí)間時(shí)要錯(cuò)開(kāi)高峰時(shí)段。
(3)在單臺(tái)PC 機(jī)上通過(guò)VMware 等虛擬機(jī)軟件安裝Hadoop 偽分布式環(huán)境,或者在單機(jī)上運(yùn)行多個(gè)虛擬機(jī)來(lái)模擬Hadoop 完全分布式環(huán)境,這也是很多Hadoop 教材案例中使用的方法。其優(yōu)點(diǎn)是對(duì)硬件環(huán)境要求不高,適合預(yù)算較為緊張的情形,也適合學(xué)生自學(xué)使用。缺點(diǎn)是單機(jī)性能有限,且在學(xué)習(xí)過(guò)程中無(wú)法體驗(yàn)到分布式環(huán)境的優(yōu)勢(shì)。
為了在有限的時(shí)間內(nèi)取得更好的教學(xué)效果,可以在教學(xué)實(shí)踐過(guò)程中結(jié)合上述幾種Hadoop 實(shí)踐教學(xué)環(huán)境的特點(diǎn),設(shè)計(jì)一套實(shí)踐環(huán)境和配套的教學(xué)方法。在基礎(chǔ)實(shí)踐環(huán)境方面:①在大數(shù)據(jù)實(shí)驗(yàn)室的64 臺(tái)PC 機(jī)上(I5-7500 CPU,8G 內(nèi)存,500G 硬盤(pán)),單獨(dú)劃分Linux 分區(qū),為每臺(tái)PC 機(jī)都安裝了Hadoop 偽分布式環(huán)境,并預(yù)先準(zhǔn)備好部分實(shí)驗(yàn)數(shù)據(jù)集和編程的工程模板;②基于Linux 服務(wù)器集群和Docker 搭建了一個(gè)彈性大數(shù)據(jù)實(shí)踐環(huán)境。該環(huán)境使用了3 臺(tái)刀片服務(wù)器,每臺(tái)服務(wù)器包含2 顆14 核28 線程CPU,256G內(nèi)存,16T 硬盤(pán),可以滿足64 個(gè)學(xué)生同時(shí)上機(jī),每個(gè)學(xué)生節(jié)點(diǎn)上運(yùn)行1 個(gè)NameNode 和2 個(gè)DataNode;③基于Windows 環(huán)境下的VMware虛擬化軟件,為學(xué)生準(zhǔn)備了一個(gè)Hadoop 偽分布式環(huán)境,學(xué)生可以將該環(huán)境拷貝到自己的筆記本電腦上運(yùn)行。
上述幾個(gè)環(huán)境中的Linux 操作系統(tǒng)、Hadoop運(yùn)行環(huán)境和Java 開(kāi)發(fā)環(huán)境均保持一致,確保程序無(wú)需修改就能在其中任何一個(gè)平臺(tái)上運(yùn)行。在教學(xué)過(guò)程中可以根據(jù)不同的實(shí)踐教學(xué)任務(wù)靈活使用上述幾種實(shí)驗(yàn)環(huán)境,組織方法如下。
(1)對(duì)于驗(yàn)證形式的實(shí)驗(yàn),如Hadoop 系統(tǒng)安裝和配置、HDFS 操作命令、HDFS API 編程等都在實(shí)驗(yàn)室PC 機(jī)上的偽分布式環(huán)境中完成,這些實(shí)驗(yàn)易于上手,執(zhí)行效率較高。
(2)對(duì)于設(shè)計(jì)型的實(shí)驗(yàn),學(xué)生在PC 機(jī)上的偽分布式環(huán)境中完成編碼,如果數(shù)據(jù)集不大,可以直接在偽分布式環(huán)境中執(zhí)行任務(wù)。如果數(shù)據(jù)集偏大需要的處理時(shí)間較長(zhǎng),則將在PC 機(jī)上完成編碼的任務(wù)提交到基于服務(wù)器集群的彈性大數(shù)據(jù)實(shí)踐環(huán)境中完成。
(3)對(duì)于課后作業(yè),學(xué)生可以在自己的筆記本電腦上完成編碼,然后通過(guò)校園網(wǎng)登錄到基于服務(wù)器集群的彈性大數(shù)據(jù)實(shí)踐環(huán)境中提交任務(wù),確保了課后作業(yè)質(zhì)量。
(4)在課程設(shè)計(jì)時(shí)間段,由于數(shù)據(jù)集較大,現(xiàn)有的資源分配方式不能滿足每個(gè)同學(xué)的上機(jī)需求。此時(shí)將3 名學(xué)生分為一個(gè)組,重新劃分彈性大數(shù)據(jù)實(shí)踐環(huán)境的資源分配比例,將賬號(hào)數(shù)量調(diào)整至20 個(gè)左右。這樣每個(gè)小組分配到的計(jì)算資源增加了3 倍,組內(nèi)成員通過(guò)相互協(xié)調(diào)分時(shí)使用計(jì)算資源完成課程設(shè)計(jì)的計(jì)算任務(wù)。也有部分動(dòng)手能力較強(qiáng)的同學(xué),在課程設(shè)計(jì)中利用實(shí)驗(yàn)室的數(shù)臺(tái)PC 機(jī)搭建一個(gè)Hadoop 完全分布式環(huán)境,同樣可以獲得較強(qiáng)的計(jì)算能力。
通過(guò)上述各種實(shí)驗(yàn)環(huán)境的靈活搭配和實(shí)踐教學(xué)過(guò)程中的靈活運(yùn)用,Hadoop 大數(shù)據(jù)開(kāi)發(fā)課程的實(shí)踐教學(xué)環(huán)節(jié)教學(xué)組織形式多樣,既避免了照本宣科,也不再受制于特定的實(shí)驗(yàn)條件,更加接近于真實(shí)的生產(chǎn)環(huán)境。
教學(xué)實(shí)踐中,在對(duì)應(yīng)用數(shù)學(xué)專業(yè)、計(jì)算機(jī)科學(xué)專業(yè)和大數(shù)據(jù)專業(yè)開(kāi)設(shè)的Hadoop 大數(shù)據(jù)開(kāi)發(fā)課程中使用了上述方法。經(jīng)過(guò)2 個(gè)學(xué)期的課程教學(xué)實(shí)踐,學(xué)生普遍反映實(shí)踐環(huán)節(jié)上手難度不大,實(shí)踐教學(xué)內(nèi)容有較強(qiáng)吸引力而且從中受到的啟發(fā)頗多。學(xué)生獨(dú)立完成實(shí)踐任務(wù)的意愿較高,提交的作業(yè)和實(shí)驗(yàn)報(bào)告中鮮有相互抄襲現(xiàn)象,取得了較好的教學(xué)效果。受制于教師水平和實(shí)驗(yàn)室條件,大數(shù)據(jù)相關(guān)課程的實(shí)踐教學(xué)方法探索和實(shí)踐環(huán)境建設(shè)是一個(gè)長(zhǎng)期的過(guò)程,我們?cè)诮窈蟮慕虒W(xué)過(guò)程中還需要不斷學(xué)習(xí)和總結(jié),緊跟大數(shù)據(jù)與產(chǎn)業(yè)深度融合的時(shí)代潮流,不斷提升教學(xué)水平和質(zhì)量。