梁 晶,胡新榮
(武漢紡織大學 數學與計算機學院,湖北 武漢 430073)
隨著獲批“大數據與數據科學”專業數量和學生人數的快速增長,迫切需要加快厘清大數據相關課程的課程體系,規范教學內容,建設相應的實驗環境。目前,大數據教學案例還不夠豐富,課程體系建設還有待完善,有些課程的設置不能緊密跟隨大數據的步伐,使得教學內容和形式還比較滯后[1]。從實踐教學的教學過程和反饋來看,大數據技術課程、云計算技術等都具備較強的應用性和綜合性特征,學生往往反映實踐難度較大[2]。
Hadoop 作為開源的大數據平臺,其分布式文件系統HDFS 和分布式計算框架MapReduce是大數據課程教學和企業大數據應用中的重要內容。Hadoop 系統可以作為單獨的一門課程,也可穿插在并行計算、自然語言處理、數據挖掘或者云計算等課程中講解[3]。
Hadoop 課程教學內容主要是分布式存儲和分布式計算,其教學目標是讓學生掌握以下幾點內容:①理解計算與存儲分離的架構在面向數據密集型計算時的缺陷,領會并行和分布式計算架構在可擴展性方面的優勢;②掌握大數據存儲和計算的特點以及所需要的技術,熟練使用HDFS 和MapReduce 編程;③理解HDFS 和MapReduce 在可擴展性和性能方面的特點,為進一步學習其他分布式計算框架打下基礎[3-4]。在文獻[1]和[2]中均描述了大數據課程的課程體系,Hadoop 課程涉及的分布式存儲概念和分布式編程方法在大數據專業的整個課程體系中處于承上啟下的中心位置。在Hadoop 課程的實踐環節中,學生需要靈活運用操作系統、Linux 系統編程、面向對象程序設計和Java 語言編程等前導課程的知識,有一定的綜合性。同時,由于大數據課程的教材建設時間較短,不同的Hadoop開發教材中實踐教學內容有一定差異,受制于教材篇幅也很難在一本教材中展現實踐教學的全部內容。因此,筆者對Hadoop 課程中涉及的實踐教學內容進行了一些整理,選取了Hadoop 課程核心的實踐教學內容,其主要包括Hadoop 系統安裝和配置、Hadoop 系統的基本操作、HDFS 編程、MapReduce 編程和綜合應用等幾個部分,具體內容見表1。
表1 中列舉的24 個學時實驗涵蓋了Hadoop系統的主要實踐教學內容,在大數據工程應用中還包含數據轉換、導入、清洗和數據展示等內容,實際教學過程中可以根據培養目標、學生接受程度、學時安排和實驗條件等因素適當調整。可以將一部分實踐教學內容作為實驗任務,亦可以作為課堂練習或者課后作業,也可以如文獻[2]描述將一部分實踐教學內容穿插到其他相關課程中進行。

表1 Hadoop 實踐教學內容
從表1 中還可以看出,MapReduce 編程是Hadoop 系統實踐教學的主要內容,也是學生學習的難點,這個部分可以結合PPT 講解、視頻教學和理實一體化教學等多種教學方式,確保學生深入理解和消化實驗中涉及的相關知識。
大數據任務的主要特點就是數據容量大(Volume),同時又對時效性(Velocity)有較高的要求。數據集的大小和構成是選擇計算平臺的主要因素,對學生來說,學會分辨一個數據處理任務是通過傳統的方法處理,還是需要使用大數據平臺來處理是一個重要的能力[5]。文獻[4—6]中介紹了一些國外大學教學中使用的數據集,其中一部分見表2。

表2 部分數據集
在實踐教學過程中,實驗數據集的選擇既要凸顯大數據的特點,又要兼顧實驗學時和實驗條件的限制。針對數據集選擇方面可參考以下幾方面。
(1)實驗中使用的數據集大小宜控制在1 000萬至2 000 萬條。數據量過小的數據集學生使用Excel 或者Mysql 數據庫就可以處理,無法凸顯出分布式存儲和分布式計算的優勢。反之如果數據量過大,由于實驗室分配到每個學生的存儲和計算資源有限,一方面HDFS 中dfs.replication 的配置會導致存儲空間占用較多,另一方面會運算時間較長,在有限的實踐教學時間內難以完成。
(2)數據集選取應盡量貼近實際應用,即數據集中的數據應選取真實的、有分析價值的數據。實際應用中產生的數據有較強的多樣性(Variety),包含結構化和非結構化數據,其中既蘊藏了客觀規律,又可能含有噪聲數據,這些不確定性避免了實驗結果千篇一律,有利于激發學生自主探索的熱情,提高學習積極性。
(3)在課內實踐學時有限的情況下,教師教學可以選用一兩個有代表性的數據集來完成HDFS 和MapReduce 編程實踐的主要教學內容。復雜數據集的預處理和分析計算需要更多時間,可以在課后作業或者課程設計中使用。如筆者在教學中使用了1 000 萬條的user_login 作為數據集,內容僅包含某網站的用戶名稱和用戶登錄時間,基于該數據集設計了WordCount、去重和排序、二次排序、自定義鍵值等實驗,目的是在有限的課堂學時內讓學生專注于掌握Hadoop 的計算架構,提高教學效率。
(4)要求學生在課后和課程設計中自行準備合適的數據集,鼓勵學生使用自己的數據集完成實驗內容。例如,在排序和自定義鍵值的實驗中,筆者要求學生提前下載noaa 全球氣象數據集(https://www1.ncdc.noaa.gov/pub/data/gsod/),完成數據預處理和數據清洗,也有一部分同學通過政府開放數據平臺data.gov 下載了其他感興趣的數據作為數據集。這樣既能有效增加數據集的多樣性,又能讓學生在實踐過程中充分發揮自主能動性。
在條件允許的情況下,學校可以通過與國內互聯網公司合作獲取TB 或者PB 級的數據集,如零售、餐飲行業的數據等。學生通過對這些海量數據中蘊藏的規律進行探索和分析能夠大大提高學生的學習興趣,增強工程實踐能力。
由于國內大數據專業開設的時間較短,各學校在實驗平臺建設方面還處于摸索階段,如何兼顧不同的大數據相關課程在實踐教學內容、教學資源和資金投入方面的要求,仍面臨較大的挑戰。
在實踐平臺的建設和選擇方面,在已經開設了Hadoop 相關課程的國內外大學中有一些成功的經驗可以借鑒。文獻[7]中采用了亞馬遜的EC2 商業大數據環境作為Hadoop 的實踐教學平臺,因此需要考慮每次實驗時長產生的費用開銷。文獻[8]列舉了國內的商業大數據運行環境,提出了通過私有云和物理機混合組建大數據計算平臺的方法。文獻[9]和[10]闡述了通過Docker 構建彈性大數據實驗環境的方法。文獻[3]中總結了4 種在教學中經常使用的Hadoop MapReduce 計算平臺。
(1)通過WebMapReduce Tool 提供的Web頁面提交MapReduce 計算任務,適合對編程能力要求不高的場合。
(2)通過用戶賬戶在共享的Hadoop 集群上提交計算任務,Hadoop 集群通過作業批處理依次運行各個用戶提交的任務。
(3)在Linux 集群上通過虛擬化生成很多運行Hadoop 集群的虛擬機,每個學生在自己的Hadoop 虛擬機上執行計算任務。
(4)在云環境下,學生通過分配到的資源創建私有的Hadoop 集群完成計算任務。
通過上述資料可以看出,各個學校選擇的Hadoop 實踐教學平臺搭建形式和使用方法不盡相同,需要綜合考慮各方面因素,相應的實踐教學手段和教學方法也稍有差異。
結合目前國內高校中的實際應用情況,Hadoop 實踐教學過程中各個平臺的特點如下。
(1)通過商業云環境搭建Hadoop 實踐環境,或者通過與互聯網公司合作共建大數據實訓環境。這種方法的優勢是實踐平臺與企業實際應用環境高度一致,容易獲取高質量的實訓軟件和訓練數據集,有利于學生創業和就業,同時實驗室也省去了維護成本。缺點是商業云環境每年都需要一定的費用開銷。
(2)通過Linux 服務器集群和Docker 構建彈性大數據實踐環境。這種方式是目前國內大數據教學平臺提供商推薦較多的環境。其優勢是提供彈性的云服務,適合動態擴容,能夠根據實踐教學需要靈活定制不同課程需要的環境,通過一次性投入可以滿足多種課程的教學需要。這種實驗條件下可以運行Hadoop 完全分布式環境,貼近生產實際。缺點是一次性投入較大,而且分配到每個學生的Linux 服務器集群資源有限,在設計時要準確估計并發的虛擬機節點數量和資源需求,安排上機時間時要錯開高峰時段。
(3)在單臺PC 機上通過VMware 等虛擬機軟件安裝Hadoop 偽分布式環境,或者在單機上運行多個虛擬機來模擬Hadoop 完全分布式環境,這也是很多Hadoop 教材案例中使用的方法。其優點是對硬件環境要求不高,適合預算較為緊張的情形,也適合學生自學使用。缺點是單機性能有限,且在學習過程中無法體驗到分布式環境的優勢。
為了在有限的時間內取得更好的教學效果,可以在教學實踐過程中結合上述幾種Hadoop 實踐教學環境的特點,設計一套實踐環境和配套的教學方法。在基礎實踐環境方面:①在大數據實驗室的64 臺PC 機上(I5-7500 CPU,8G 內存,500G 硬盤),單獨劃分Linux 分區,為每臺PC 機都安裝了Hadoop 偽分布式環境,并預先準備好部分實驗數據集和編程的工程模板;②基于Linux 服務器集群和Docker 搭建了一個彈性大數據實踐環境。該環境使用了3 臺刀片服務器,每臺服務器包含2 顆14 核28 線程CPU,256G內存,16T 硬盤,可以滿足64 個學生同時上機,每個學生節點上運行1 個NameNode 和2 個DataNode;③基于Windows 環境下的VMware虛擬化軟件,為學生準備了一個Hadoop 偽分布式環境,學生可以將該環境拷貝到自己的筆記本電腦上運行。
上述幾個環境中的Linux 操作系統、Hadoop運行環境和Java 開發環境均保持一致,確保程序無需修改就能在其中任何一個平臺上運行。在教學過程中可以根據不同的實踐教學任務靈活使用上述幾種實驗環境,組織方法如下。
(1)對于驗證形式的實驗,如Hadoop 系統安裝和配置、HDFS 操作命令、HDFS API 編程等都在實驗室PC 機上的偽分布式環境中完成,這些實驗易于上手,執行效率較高。
(2)對于設計型的實驗,學生在PC 機上的偽分布式環境中完成編碼,如果數據集不大,可以直接在偽分布式環境中執行任務。如果數據集偏大需要的處理時間較長,則將在PC 機上完成編碼的任務提交到基于服務器集群的彈性大數據實踐環境中完成。
(3)對于課后作業,學生可以在自己的筆記本電腦上完成編碼,然后通過校園網登錄到基于服務器集群的彈性大數據實踐環境中提交任務,確保了課后作業質量。
(4)在課程設計時間段,由于數據集較大,現有的資源分配方式不能滿足每個同學的上機需求。此時將3 名學生分為一個組,重新劃分彈性大數據實踐環境的資源分配比例,將賬號數量調整至20 個左右。這樣每個小組分配到的計算資源增加了3 倍,組內成員通過相互協調分時使用計算資源完成課程設計的計算任務。也有部分動手能力較強的同學,在課程設計中利用實驗室的數臺PC 機搭建一個Hadoop 完全分布式環境,同樣可以獲得較強的計算能力。
通過上述各種實驗環境的靈活搭配和實踐教學過程中的靈活運用,Hadoop 大數據開發課程的實踐教學環節教學組織形式多樣,既避免了照本宣科,也不再受制于特定的實驗條件,更加接近于真實的生產環境。
教學實踐中,在對應用數學專業、計算機科學專業和大數據專業開設的Hadoop 大數據開發課程中使用了上述方法。經過2 個學期的課程教學實踐,學生普遍反映實踐環節上手難度不大,實踐教學內容有較強吸引力而且從中受到的啟發頗多。學生獨立完成實踐任務的意愿較高,提交的作業和實驗報告中鮮有相互抄襲現象,取得了較好的教學效果。受制于教師水平和實驗室條件,大數據相關課程的實踐教學方法探索和實踐環境建設是一個長期的過程,我們在今后的教學過程中還需要不斷學習和總結,緊跟大數據與產業深度融合的時代潮流,不斷提升教學水平和質量。