陳 康
文章編號:1672-5913(2009)08-0054-04
摘要:本文通過對一個全新的實踐課程“基于大規(guī)模集群的海量數(shù)據(jù)處理技術”的教學課程內(nèi)容與教學設計的分析,對引入工業(yè)界最新的技術到教學實踐過程進行了有益的嘗試。通過實踐表明,在現(xiàn)有的本科課程體系中選取適當?shù)墓I(yè)界實踐技術能夠有效激發(fā)學生的學習熱情,提高學習興趣,并通過小組項目的形式有效增強了學生的創(chuàng)新能力,合作能力和動手能力。
關鍵詞:集群;海量數(shù)據(jù)處理;工業(yè)界新技術;創(chuàng)新課程
中圖分類號:G642
文獻標識碼:B
1課程簡介
本課程是Google公司與清華大學合作,在清華大學開設的有關集群分布式編程的課程。通過本課程的學習,學生將深入了解到通過大規(guī)模集群的模式處理海量數(shù)據(jù)的方式與編程方法。在課程進行的過程中,來自Google公司的工程師了講述有關使用大規(guī)模集群處理海量數(shù)據(jù)的理論知識以及相應的實際編程方法。通過實踐相關的課程內(nèi)容,使用開源的Apache Hadoop工具,學生親身實踐了Google文件系統(tǒng)以及Google所使用的分布式編程方式MapReduce。學生需要完成特定的分布式應用程序設計來鞏固所學的編程知識,用于處理實際的海量數(shù)據(jù)問題。
2課程的內(nèi)容
本課程的內(nèi)容分成兩個部分,一個部分是上課的內(nèi)容,即是在課堂中講述分布式編程的基本理論與方法,主要包括下面五個方面的內(nèi)容:
(1) 課程簡介:主要講述分布式編程的模式,分布式編程所需要涉及到的相關知識,包括分布式的應用問題,并行與分布的基礎,分布式的歷史,并行編程與同步等的相關內(nèi)容。
(2) MapReduce編程技術:主要講述有關MapReduce編程技術的來龍去脈,相關的理論與技術實現(xiàn),包括函數(shù)式編程語言的簡介,大規(guī)模數(shù)據(jù)處理,MapReduce的編程模型,MapReduce編程實例,在實際編程中的錯誤處理以及優(yōu)化等相關內(nèi)容。
(3) 分布式系統(tǒng)的層次:主要簡介分布式編程,包括網(wǎng)絡的基本處理,遠程過程調(diào)用,事務處理系統(tǒng)的工作流程,可靠性等方面的內(nèi)容。
(4) 分布式文件系統(tǒng):分布式文件系統(tǒng)是分布式編程的一塊重要的內(nèi)容,是構建上層應用的基礎,用來存儲各種應用的數(shù)據(jù)。本節(jié)的內(nèi)容包括文件系統(tǒng)簡介,網(wǎng)絡文件系統(tǒng)NFS以及AFS相關的內(nèi)容,Google使用的GFS(Google File System)等相關的內(nèi)容。
(5) 其它的分布式系統(tǒng):將通過具體的例子來講述在實際的可運行的分布式系統(tǒng)的內(nèi)部結構,內(nèi)容包括域名系統(tǒng),PlanetLab等,這些內(nèi)容為學員將來的研究提供入門的知識。提高的內(nèi)容還包括Google所使用的分布式鎖技術Chubby以及分布式的結構化數(shù)據(jù)處理方法BigTable。
本課程的另外一個重要組成部分是實驗和分組大項目。其中實驗內(nèi)容是固定的,分組大項目則由學生自由組合,一般由2~3人為一個小組。每個小組自主提出與課程內(nèi)容相關的大實驗內(nèi)容,并有大約3個星期的時間完成大項目的內(nèi)容。下面是固定實驗的內(nèi)容:
實驗0:實驗環(huán)境Hadoop/Eclipse/Map/Reduce編程環(huán)境的介紹與熟悉。
實驗1:倒排索引實驗
倒排索引是所有搜索引擎的基礎,將一個文檔中出現(xiàn)的單詞以及相關的文檔編號聯(lián)系在一起,以便在檢索的時候能夠達到快速搜索的目的。本實驗通過讓學生對Wikipedia的數(shù)據(jù)進行倒排索引,使得學生初步具有使用分布式環(huán)境進行大規(guī)模文檔索引的基本技能。
實驗2:圖算法PageRank的實現(xiàn)
圖算法PageRank是Google對一個網(wǎng)頁進行評價的一個重要因素。本實驗使用Wikipedia網(wǎng)頁數(shù)據(jù),形成一個網(wǎng)絡圖的結構。通過實現(xiàn)一個分布式的PageRank算法,使得學生能夠在分布式系統(tǒng)上實現(xiàn)算法有一個較為深入的認識。同時結合實驗一的內(nèi)容,使得學生能夠了解到當前搜索引擎的基本架構。
實驗3:聚類算法Canopy的實現(xiàn)
在分布式系統(tǒng)處理大規(guī)模數(shù)據(jù)的時候,還需要考慮很多算法,其中本實驗的聚類算法即是一項比較重要的內(nèi)容。聚類算法通過無監(jiān)督的學習過程,從一個數(shù)據(jù)集中抽取有用的信息。聚類算法的計算量比較大,本實驗則是通過分布式的方法,能夠處理大數(shù)據(jù)集Netflix的數(shù)據(jù)。使得學生能夠?qū)τ诖笠?guī)模數(shù)據(jù)處理有更進一步的認識。
3課程實踐
我們在2007年和2008年暑假分別組織了兩次課程??傮w來說,兩次課程還是非常成功的,許多學生在這個課程上第一次體驗了分布式編程,觀察到程序在多個節(jié)點上同時運行的情況。
3.1課程的準備與授課
(1) 硬件環(huán)境的準備
Google為本課程提供了一個20個節(jié)點的集群,集群節(jié)點配置為兩路雙核Intel CPU 1.2GHz,每個節(jié)點配備4G內(nèi)存,兩塊SATA180G的硬盤,集群的各個節(jié)點之間采用千兆以太網(wǎng)連接。
(2) 軟件環(huán)境的準備
課程所需要的數(shù)據(jù)集從網(wǎng)絡上采集,在實驗開始之前在實驗環(huán)境的存儲設備上準備完畢。網(wǎng)絡上的數(shù)據(jù)主要是兩個部分,一部分是Wikipedia的數(shù)據(jù),一部分是Netflix的數(shù)據(jù)。Wikipedia的數(shù)據(jù)在硬盤上展開之后有10G之多,存放到Hadoop的分布式文件系統(tǒng)HDFS中。Netflix的數(shù)據(jù)也有1G之多,同樣放在HDFS中。學生的應用程序可以直接訪問這些數(shù)據(jù)。
在應用軟件上,主要是軟件包Hadoop的部署。由于Hadoop本身還需要ssh等軟件的支持,以保證安全性以及遠程執(zhí)行,在配置上面需要一定的工作量。在編程環(huán)境方面,主要是Java環(huán)境的部署(使用從Sun公司網(wǎng)站上下載的最新的JDK軟件包)以及Eclipse編程環(huán)境上MapReduce插件的安裝。這幾個軟件安裝比較方便,下載軟件包解壓縮,而后配置一下環(huán)境變量。
在教材的準備上,我們修改了一部分由Google提供的教材,使得教材能夠更加符合計算機系現(xiàn)有的教學進度。主要修改的內(nèi)容包括增加了一部分分布式系統(tǒng)系統(tǒng)內(nèi)容的介紹,原因是本科生以前沒有學習過分布式系統(tǒng)的課程(實際上本科生還是十分需要了解分布式系統(tǒng)的),對分布式系統(tǒng)沒有感性認識;減少了有關函數(shù)式編程語言的內(nèi)容,因為本科生沒有相關的課程,而此部分內(nèi)容與分布式系統(tǒng)相關性不是很大。
(3) 授課的過程
暑期小學期的時間是5個星期,因此本課程的安排也是按照5個星期的時間進行。在前兩周主要是固定的授課時間(上午9點到11點),隔天進行,同時穿插固定的實驗內(nèi)容。學生一般在兩個星期之內(nèi)完成5個規(guī)定的實驗項目。在2007年授課的時候,我們還邀請了Google公司內(nèi)部的員工給學生做了三個特殊的講座,分別是有關Google內(nèi)部RPC的實現(xiàn)機制,對等網(wǎng)絡的介紹以及BigTable內(nèi)容的相關講座。學生對于這樣的講座非常感興趣,因為這些內(nèi)容實際上是在工業(yè)界正在使用的技術內(nèi)容,對于平常課本的教學內(nèi)容有進一步更深的認識。2007年的夏季學期有15位同學選課,最后分成7個小組做大項目;2008年有14位同學選課,分成6個小組做大項目。在完成大項目之后,每一個小組會派出一名代表在所有的同學面前講述自己小組的工作以及小組成員的分工情況。2007年的大項目總結會在Google中國公司進行,Google公司總部、華盛頓分部以及Google中國公司的部分員工參與了最后的總結會。學生的項目創(chuàng)意和完成情況受到了他們的好評,有很多項目被認為具有研究生水平。
3.2學生大項目的情況
大項目是由學生自主提出項目內(nèi)容,基于課程內(nèi)容完成。
2007年的大項目概況:
●項目1:對Netflix數(shù)據(jù)進行處理,實現(xiàn)相應的矩陣算法SVD,使得從這個數(shù)據(jù)集中獲得比較好的電影推薦結果。
●項目2:通過對學校中各種不同角色的模擬以及他們之間的相互關系,可以用來模擬傳染病在一個人群中的傳播模式(如圖1所示)。
圖1Epidemic!傳染病模擬(學校生活模擬)
●項目3:通過網(wǎng)絡上的數(shù)據(jù)采集以及最后對采集到的數(shù)據(jù)進行后期處理,建立索引,對于用戶采購IT產(chǎn)品,例如數(shù)碼相機進行推薦,是一個垂直搜索的雛形。
●項目4:NBody系統(tǒng)的模擬,即通過模擬多個小球或者數(shù)量眾多節(jié)點的相互作用模型,用以研究行星的變化,氣體的變化,布朗運動等。
●項目5:統(tǒng)計氣象預報,通過對某一個地區(qū)幾十年的氣象數(shù)據(jù)進行統(tǒng)計,用來對未來的數(shù)據(jù)進行預報,主要實現(xiàn)一個分布式的神經(jīng)網(wǎng)絡算法。
●項目6:心電圖數(shù)據(jù)處理,現(xiàn)有的心電圖數(shù)據(jù)處理還停留在小規(guī)模的狀態(tài),大規(guī)模的心電圖數(shù)據(jù)被大量浪費,本項目試圖對大量的數(shù)據(jù)進行并行處理,從而能夠利用長時間的心電圖數(shù)據(jù)。
●項目7:網(wǎng)絡音樂的模式分類,由于網(wǎng)絡上各種
音樂數(shù)據(jù)非常的多,本項目則基于內(nèi)容對音樂進行聚類和搜索。
2008年的大項目概況:
●項目1:筆記本電腦信息的整合與搜索:從互聯(lián)網(wǎng)上各大網(wǎng)站等信息來源獲取各類筆記本產(chǎn)品的詳細信息,對數(shù)據(jù)進行分類和索引,根據(jù)用戶的查詢需求提供產(chǎn)品推薦,為用戶在購買筆記本時提供有針對性的推薦和查詢服務。
●項目2:水木精華區(qū)的全文搜索:為水木精華區(qū)建立全文搜索引擎,以網(wǎng)絡爬蟲為開始,將數(shù)據(jù)保存到分布式文件系統(tǒng)中并建立索引,最后建立搜索引擎。
●項目3:網(wǎng)絡新聞分類:從互聯(lián)網(wǎng)上下載各類新聞,并通過機器學習算法建立新聞分類。主要實現(xiàn)一個基于樸素貝葉斯方法的分類器以及網(wǎng)頁下載與索引程序(如圖2所示)。
圖2 新聞分類搜索引擎
●項目4:跨論壇熱門信息檢索:網(wǎng)絡上有多個論壇的內(nèi)容,本項目是為了在多個論壇的熱點新聞之間建立聯(lián)系,在構造搜索引擎的過程中,將論壇熱門信息因素加入到檢索排序中。
●項目5:煎餅大亨:本項目主題是實現(xiàn)一款模擬經(jīng)營類游戲。使用Apache Hadoop大規(guī)模數(shù)據(jù)處理技術,對店鋪、顧客進行模擬,并針對店鋪信息等提供可供玩家設置的交互性,從而實現(xiàn)最簡單的模擬經(jīng)營效果。
●項目6:圖片搜索引擎:實現(xiàn)了一個基本的圖片搜索引擎的功能。根據(jù)關鍵字來查找互聯(lián)網(wǎng)相關圖片,返回圖片縮略圖,并給出文件名,文件大小,圖片所在網(wǎng)頁等信息。
3.3經(jīng)驗,教訓,反饋
(1) 經(jīng)驗與教訓
總體而言,本課程的開展還是非常成功的,大部分學生都是第一次接觸到分布式系統(tǒng)的編程,也第一次通過集群的方式去解決一個具體的數(shù)據(jù)處理問題。例如在2004級學生孟祥亮在畢業(yè)總結中寫道:“學習到很多平時課堂上學不到的知識”。
學生基本上對這樣的授課形式非常有興趣,即首先通過一定的課堂講解獲得基礎知識,而后利用所獲得的知識解決一些實際的問題。在課程內(nèi)容上,由于課程內(nèi)容非常新穎,而且也緊貼當前工業(yè)界的熱點,因此能夠引起學生很大的學習興趣,積極性比較高。通過本課程的學習,學生能夠在一定程度上了解到當前計算機工業(yè)界中所采用的技術,而不是課本上比較枯燥的內(nèi)容。實際上,這樣的實踐課能夠?qū)⒄n本知識與實際應用相結合,滿足學生對于工程實踐上相關內(nèi)容的了解需求。而實驗的設計則完全能夠滿足學生對于分布式編程的初步認識,了解程序的相關運行狀況。
在教學的過程中也碰到了一些技術上的困難。最困難的是Hadoop環(huán)境的問題,由于是尚未成熟的軟件包,Hadoop缺乏文檔說明,設置起來也比較困難?,F(xiàn)在Hadoop的最新版本是0.19,還需要很多工作才能夠使得軟件成熟。好在設置完成之后的Hadoop在運行的過程中較為穩(wěn)定,基本上能夠穩(wěn)定運行2~3天,出現(xiàn)異常狀況后只需要重新啟動即可。在具體的教學過程中的困難是Hadoop缺乏編程文檔,在很多情況下需要學生去閱讀源代碼,這可以讓學生更加深入地了解相關系統(tǒng)的運行狀況。
在大項目的選題情況上,基本上所有的項目都可以歸為三個類型。第一個類型是網(wǎng)絡應用程序,即通過重新實現(xiàn)一個搜索引擎類似的應用來加深對于課程內(nèi)容的印象以及對現(xiàn)有網(wǎng)絡應用程序構建的直觀經(jīng)驗。第二個類型是有關于機器學習的分布式實現(xiàn),由于機器學習是一大類比較重要的應用程序,可能需要處理大量的數(shù)據(jù),學生很有興趣使用分布式的方式去實現(xiàn)現(xiàn)有的機器學習算法。第三個是非常具體的類型,是有關于N體問題的模擬,選題的方向比較直接,即對每一個體做模擬,然后在局部做相互作用關系,最后總結作用關系模擬出結果。由于課程的設置比較緊,學生沒有太多的時間考慮一些更加有意思的課題,這一點需要在將來的授課實踐中做改進。
(2) 教學反饋
在教學完成之后,我們對學生的學習情況作了一定的調(diào)查總結,獲得有益的反饋??偨Y來說,學生反而反應情況有兩點:
(1) 時間比較緊。由于是5個星期的課時,需要完成的工作很多,包括上課,讀論文,寫家庭作業(yè)(回答有關論文的小問題),做規(guī)定的實驗以及最后的大項目。在這樣的情況下,學生在構思最后的大項目的時候比較匆忙,從而只能夠想到一些比較容易獲得的題目。另外,有些學生認為聚類的大實驗可能沒有必要,但實際上這是一次讓學生了解不同分布式系統(tǒng)的機會,還是不要去掉的為好。在時間緊張的情況下,有一些家庭作業(yè)倒是可以去掉,因為在講課的過程中已經(jīng)有所涉及 。
(2) 計算資源缺乏。在所有學生同時運行程序的時候,20個節(jié)點還遠遠無法滿足計算需求。特別是將近暑假小學期結束的時候,系統(tǒng)的反應會非常緩慢。如果有可能的話,需要增加計算節(jié)點,以提高集群的總體計算能力?;蛘邔⒐?jié)點進行分組,由某些組共享幾個獨立的節(jié)點,但是這樣會減少程序的分布式程度。有幾個學生在學習的過程中已經(jīng)能夠自己建立Hadoop集群,減少與其它組同學的相互影響,提高效率。
另外,我們還舉辦了有關此課程的全國著名高校研討班,參加者包括北京大學,上海交通大學,浙江大學,華中科技大學,北京科技大學等高校教師,反響熱烈。與會各方的教師以及Google方面的代表都認為此課程是非常有意義的。下面是參會人員的反響。
“本次培訓班舉辦得很成功?!?/p>
——Google公司朱愛民(Google公司高校合作部)
“研討會上獲得的經(jīng)驗和資料將幫助我們課程的順利展開。”
——北京大學閆宏飛(副教授)
北京大學和浙江大學已經(jīng)率先開展了相關的課程。
4結論
我們組織了新型課程“基于大規(guī)模集群的海量數(shù)據(jù)處理技術”,本課程將最新的工業(yè)界使用的分布式數(shù)據(jù)處理技術帶給學生。總結來說,本課程很好的為學生講述了如何構建一個真正可用的分布式系統(tǒng),將課本知識擴展到實踐的層次,加深學生對所學知識的印象。同時,本課程也為本科學生提供了分布式編程的機會,提高他們的專業(yè)水平。我們認為引入工業(yè)界最新的技術到教學實踐過程是非常有益的嘗試。
參考文獻:
[1] Kang Chen, Yubing Yin, Weimin Zheng. Teaching Large Scale Data Processing: the Five-Week Course and Two Years Experiences[R]. The First ACM Summit on Computing Education in China, Beijing, Oct. 24-26,2008.
[2] S. M.-S. Aaron Kimball and C. Bisciglia. Cluster computing for web scale data processing[C]. SIGCSE08, Portland, OR.,2008.
[3] S. G. Jeffrey Dean. Mapreduce: Simplified data processing on large clusters[C]. OSDI 04: Sixth Symposium on Operating System Design and Implementation,2004,137-150.
[4] S.-T. L. Sanjay Ghemawat,Howard Gobioff. The google system[C]. Proceedings of the 19th ACM Symposium on Operating Systems Principles,2003,20-43.