崔曉龍, 張 敏,b, 郭 茜,b, 王小妹, 張德政,b
(北京科技大學a.計算機與通信工程學院;b.材料領域知識工程北京市重點實驗室,北京100083)
以Hadoop 為代表的大數據技術目前在數據處理的許多方面已經取得了非常突出的成績,高校目前越來越多地開設大數據相關課程,以培養學生大數據處理方面的能力。然而大數據技術種類繁多且涉及的應用場景各異,形成了較為龐大的知識體系,很難在一門課程中涵蓋所有的技術,故而如何設置大數據課程的教學內容,另外課程如何理順各種技術之間的關系,使學生對技術的應用場景更加清晰,也是大數據課程的一大挑戰[1]。
為了解決上述問題,讓學生能夠由淺入深的掌握大數據技術并且可以進一步自學相關技術,課程教學過程中需要設計合理的學習路徑,面對龐大的大數據知識體系與多種大數據技術,在教學過程中采用多層次課程內容設計(基礎層、提高層、綜合層),同時針對大數據處理過程(數據采集、數據預處理、數據存儲、數據分析、數據可視化)[2],選取各個過程中采用的典型技術進行重點講述,并合理設計各層次知識點,按照知識點由易到難、涵蓋基礎操作、開發、運維、優化的原則,讓學生最終能對各種技術組件有深刻的認識,在實際應用場景中,學生可根據應用需求進行技術選型并完成架構設計和開發工作[3]。
大數據技術目前已經形成了較龐大的知識體系,如圖1 所示。其中學生需要掌握較多的先修知識,如Java基礎、Linux基礎、數據庫原理以及R或Python 語言編程等,故而大數據課程往往作為高年級本科生或研究生課程來講授。目前主流大數據技術以Hadoop和Spark相關技術為代表,這兩部分將作為課程的核心內容來講授,對于Hadoop生態圈將重點講授分布式文件系統HDFS、分布式數據庫HBase 以及數據倉庫工具Hive,對于Spark 生態圈,則需要講授SparkRDD各種算子的使用、Spark Streaming、Spark SQL 和MLlib的使用,掌握這部分核心知識,能夠讓學生快速構建出大型的離線或實時的應用項目。另外,要完成完整的大數據分析處理應用,除了上述核心技術,數據采集、數據可視化等過程也是必不可少的,課程將選取相關典型的技術進行講授,如數據采集中的Kafka、Flume和Sqoop等技術。通過向學生展示大數據知識體系,讓學生對大數據技術有宏觀的認識,在課程學習過程中,逐漸形成自己的學習路線和建立起自己的大數據知識體系[4]。

圖1 大數據知識體系
大數據知識體系涉及的知識較多,由于學時數限制,將根據當前主流技術選擇典型的進行講解,同時為了讓學生由淺入深的掌握多種技術,對每一種技術的講解將劃分為基礎層、提高層和綜合層,如表1 所示。基礎層包含對技術組件的基本概念、適用場景、基礎操作和編程開發,通過本部分的學習學生可掌握該組件的基本特點和使用,能開發單獨的基于該組件的應用程序;提高層則會進一步講解組件的設計架構,在掌握基本操作的基礎上讓學生體會安裝運維的過程,同時會講解影響平臺和應用程序性能的參數,讓學生能夠在平臺運行出現問題的時候發現錯誤,并能夠對平臺運行性能進行參數優化;綜合層則在前面知識的基礎上,講授大數據典型應用場景及架構,結合真實案例讓學生進行實訓,完成大數據工程技術實踐環節[5]。

表1 課程層次設計
大數據技術涵蓋了從數據獲取、數據存儲、數據處理、數據可視化等多個方面,課程中將選擇典型技術組件進行講授,并設計多層次的學習路線,使學生能夠由淺入深更加清晰地掌握該技術組件的使用方法及應用場合。
HDFS提供了多種訪問方式,常用的方式有命令行接口、Java API,這些知識將是HDFS使用的基礎。
2.1.1 命令行接口方式
命令行接口訪問HDFS 的方式較為簡單且固定,且非常類似Linux 系統命令,學生可按照表2 的操作命令完成實驗以熟悉基本的操作命令[6]。

表2 HDFS命令行基本操作
2.1.2 Java API訪問方式
對應于命令行接口的訪問方式,HDFS 提供給用戶Java API進行訪問,同樣可以完成文件目錄創建、文件上傳、下載、刪除等操作,在應用開發時需要采取這種訪問方式來實現。可讓學生通過實現表2 中的基本操作來熟練掌握Java API的訪問方式。
學生在掌握基本操作的基礎上,可進一步掌握HDFS的安裝運維排錯以及平臺的調優,這將對日后從事大數據技術運維相關工作奠定基礎。在提高層,需要學生掌握安裝過程各配置步驟的目的,進而能夠準確判斷出發生錯誤的位置并解決問題;同時,了解影響HDFS特性的配置參數,能夠對平臺參數進行優化配置。
2.2.1 安裝
HDFS的安裝將讓學生掌握Linux 系統中軟件的安裝配置過程,采用分布式安裝模式,主要過程有Linux 系統配置、Hadoop2.0 安裝及配置、Hadoop 的啟動[7]。
(1)Linux系統配置。Linux系統配置主要完成基礎操作系統環境的配置,主要步驟如表3 所示。

表3 Linux系統配置項目
(2)Hadoop2.0 安裝及配置。配置完Linux 系統環境后,將安裝Hadoop2.0,具體步驟如表4 所示。

表4 Hadoop2.0 安裝及配置項目
(3)Hadoop的啟動。安裝完成之后,Hadoop啟動過程如表5 所示。
2.2.2 運維
HDFS運維將涉及的內容較多,課程中將主要講述一些基本的錯誤及排錯方法,同時將在實驗指導過程中設置一些錯誤讓學生去解決,并且熟練掌握一些常用命令的使用及信息的查看,常用管理命令如表6所示[6]。

表5 Hadoop的啟動

表6 HDFS管理命令
2.2.3 調優
HDFS調優可從架構、參數等不同角度來進行,架構調優難度較高,需要從源碼角度來解決HDFS 存在的一些缺點,如小文件存儲問題,課程將主要講述參數調優,即與HDFS性能相關的配置參數,學生將通過實驗來體會不同的配置參數對存儲的影響,進一步可繪制性能曲線讓學生觀察參數對性能的影響以及不同參數之間的相互影響。對HDFS 影響較大的參數有很多,表7 中列舉了部分常用配置參數[8]。

表7 HDFS配置參數
在學習了基礎層和提高層的相關知識后,學生將對單一的大數據技術組件有了較好的理解,在實際生產環境中,往往是多種技術組件的組合使用,這就要求學生掌握面對不同的應用場景時如何進行技術選型和架構設計,課程中將提供多個不同的教學案例讓學生進行實踐,目前可提供的學習案例如表8 所示。通過這些真實的大數據項目,學生可以把之前學習的各種技術貫穿,學習大數據項目從數據采集、預處理、存儲、分析處理到可視化的完整過程,理解整個架構的設計,并在實踐過程中解決遇到的問題和難點[9-12]。

表8 教學案例
2.3.1 技術選型
大數據技術選型主要根據應用需求進行各種組件的組合、軟件版本的選擇,并讓各種組件協調起來完成整體的功能,這就需要學生了解不同組件的特點以及適用場景,圖2 展示了大數據生態圈從數據聚合層到高級分析應用層所提供的不同技術組件[13]。其中,大數據技術的一大挑戰即多源異構數據,如數據庫數據、日志數據、網頁數據等,針對不同類型的數據,數據聚合層將提供不同的工具進行數據采集,如針對數據庫的Sqoop、針對網頁的爬蟲Nutch 等,通過這些工具采集完數據后將數據存儲到數據存儲層的HDFS 中,這些數據即可供后續過程進行分析處理,數據處理層提供了基本的數據處理接口供用戶編程使用,高層訪問接口層則提供了許多易用的數據訪問處理方式,如類SQL語句的Hive,最終在應用中由高級分析應用層所提供的工具進行數據挖掘以及數據可視化的工作。

圖2 大數據生態圈技術組件
2.3.2 架構設計
架構設計將對典型的大數據架構進行講述,如離線分析架構、流式架構、Lambda 架構、Kappa 架構等,然后由學生對課程提供的教學案例進行設計與實現,以搜狗搜索日志數據分析為例,該應用場景是非常典型的離線分析架構,其架構設計如圖3 所示。

圖3 搜狗日志分析架構圖
日志數據將通過數據采集工具導入到匯聚服務器中,該過程將對數據質量進行監控并對有問題的數據進行數據預處理,然后將清洗后的數據加載到HDFS存儲中,采用計算框架MapReduce 或Spark 可進行數據分析,也可采用Hive 提供的高層接口進行數據訪問,此類分析是典型的數據倉庫類業務架構,另外可通過數據挖掘技術如Mahout 等對存儲在HDFS 中的數據進行分析處理,將挖掘結果保存在HBase 中,滿足用戶進行在線查詢分析的需求。
2.3.3 實驗設計
(1)數據預處理。搜狗搜索日志數據的數據格式為中間以“\t”分隔的文本類型,數據記錄有500 萬條,其字段含義如表9 所示。其中,用戶ID是根據用戶使用瀏覽器訪問搜索引擎時的Cookie 信息自動賦值,即同一次使用瀏覽器輸入的不同查詢對應同一個用戶ID。

表9 數據字段及含義
數據預處理過程將解決中文亂碼、數據擴展以及數據過濾等問題,具體來說,中文亂碼問題完成數據由GBK到UTF-8 的編碼轉換,數據擴展將訪問時間字段拆分為年、月、日、小時4 個字段,數據過濾則過濾掉“用戶ID”和“查詢詞”字段中字段值為空的記錄。經過預處理后,將數據加載到HDFS中。
(2)基于Hive 構建數據倉庫。在該階段,基于Hive構建搜狗搜索日志數據倉庫,將建立外部表sg_20111230 和根據日期字段建立分區表sg_partition,并根據兩張表完成主題分析,分析主題如表10 所示。下面將以比較復雜的幾個分析子需求進行描述。
①查詢次數大于2 次的用戶展示。以“用戶UID分析”中的查詢次數大于2 次的用戶為例,其處理代碼和結果展示如圖4 所示(該結果為Hue 工具提供的可視化查詢界面)。

表10 搜狗搜索日志數據分析需求

圖4 搜狗日志數據分析示例
② 點擊次數與Rank 之間的關系分析。查詢Rank在10 以內的點擊次數占比,過程如下:
A:select count(*)from sg_20111230 where rank <11;
B:select count(*)from sg_20111230;
A查詢表示數據中Rank 小于11 次的記錄條數,B查詢表示數據總條數,獲取A 和B 的結果后,通過計算A/B即可得到分析結果。學生可以觀察到,用戶大多數只訪問位于搜索結果第一頁(即Rank 在10 以內的)的頁面,這種用戶行為符合大多數搜索引擎使用者的使用習慣,即最常瀏覽的頁面位于搜索結果的前幾個。
③直接輸入URL作為查詢詞的比例。直接輸入URL查詢可通過模糊查詢得出,然后在直接輸入URL的查詢中,訪問URL 的總數就是用戶輸入URL 查詢然后訪問的數量,分析過程如下:
A:select count(*)from sg_20111230 where keyword like‘%www%’;
B:select SUM(IF(instr(url,keyword)>0,1,0))from(select * from sg_20111230 where keyword like‘%www%’)a;
A查詢表示關鍵字字段中包含“www”的記錄條數,B查詢表示URL 包含keyword 的查詢結果的記錄條數,獲取A和B 的結果后,通過計算B/A 即可得到分析結果,從這個比例可以看出,很大一部分用戶在借助搜索引擎查找時,往往由于不能記住全部的網址,這時用戶會對部分URL進行查找,以期找到想要瀏覽的網頁。基于此分析在搜索引擎處理此類查詢時,可考慮將包含該查詢關鍵字的完整URL反饋給用戶,往往在很大概率上符合用戶的查詢請求。
通過在大數據工程實踐課程中采用多層次教學設計,將厘清大數據各種技術的學習路線,由淺入深、由易到難,讓學生可以更好地有針對性地進行學習,同時以實際工程案例為背景作為綜合層的學習內容,逼真地模擬了現實大數據分析場景,更加容易激發學生的學習興趣,學生在“分析問題-實現方案-解決問題”的過程中提高了“解決復雜工程問題”的能力[14]。