崔曉龍, 張 敏,b, 郭 茜,b, 王小妹, 張德政,b
(北京科技大學(xué)a.計(jì)算機(jī)與通信工程學(xué)院;b.材料領(lǐng)域知識(shí)工程北京市重點(diǎn)實(shí)驗(yàn)室,北京100083)
以Hadoop 為代表的大數(shù)據(jù)技術(shù)目前在數(shù)據(jù)處理的許多方面已經(jīng)取得了非常突出的成績(jī),高校目前越來(lái)越多地開(kāi)設(shè)大數(shù)據(jù)相關(guān)課程,以培養(yǎng)學(xué)生大數(shù)據(jù)處理方面的能力。然而大數(shù)據(jù)技術(shù)種類(lèi)繁多且涉及的應(yīng)用場(chǎng)景各異,形成了較為龐大的知識(shí)體系,很難在一門(mén)課程中涵蓋所有的技術(shù),故而如何設(shè)置大數(shù)據(jù)課程的教學(xué)內(nèi)容,另外課程如何理順各種技術(shù)之間的關(guān)系,使學(xué)生對(duì)技術(shù)的應(yīng)用場(chǎng)景更加清晰,也是大數(shù)據(jù)課程的一大挑戰(zhàn)[1]。
為了解決上述問(wèn)題,讓學(xué)生能夠由淺入深的掌握大數(shù)據(jù)技術(shù)并且可以進(jìn)一步自學(xué)相關(guān)技術(shù),課程教學(xué)過(guò)程中需要設(shè)計(jì)合理的學(xué)習(xí)路徑,面對(duì)龐大的大數(shù)據(jù)知識(shí)體系與多種大數(shù)據(jù)技術(shù),在教學(xué)過(guò)程中采用多層次課程內(nèi)容設(shè)計(jì)(基礎(chǔ)層、提高層、綜合層),同時(shí)針對(duì)大數(shù)據(jù)處理過(guò)程(數(shù)據(jù)采集、數(shù)據(jù)預(yù)處理、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)分析、數(shù)據(jù)可視化)[2],選取各個(gè)過(guò)程中采用的典型技術(shù)進(jìn)行重點(diǎn)講述,并合理設(shè)計(jì)各層次知識(shí)點(diǎn),按照知識(shí)點(diǎn)由易到難、涵蓋基礎(chǔ)操作、開(kāi)發(fā)、運(yùn)維、優(yōu)化的原則,讓學(xué)生最終能對(duì)各種技術(shù)組件有深刻的認(rèn)識(shí),在實(shí)際應(yīng)用場(chǎng)景中,學(xué)生可根據(jù)應(yīng)用需求進(jìn)行技術(shù)選型并完成架構(gòu)設(shè)計(jì)和開(kāi)發(fā)工作[3]。
大數(shù)據(jù)技術(shù)目前已經(jīng)形成了較龐大的知識(shí)體系,如圖1 所示。其中學(xué)生需要掌握較多的先修知識(shí),如Java基礎(chǔ)、Linux基礎(chǔ)、數(shù)據(jù)庫(kù)原理以及R或Python 語(yǔ)言編程等,故而大數(shù)據(jù)課程往往作為高年級(jí)本科生或研究生課程來(lái)講授。目前主流大數(shù)據(jù)技術(shù)以Hadoop和Spark相關(guān)技術(shù)為代表,這兩部分將作為課程的核心內(nèi)容來(lái)講授,對(duì)于Hadoop生態(tài)圈將重點(diǎn)講授分布式文件系統(tǒng)HDFS、分布式數(shù)據(jù)庫(kù)HBase 以及數(shù)據(jù)倉(cāng)庫(kù)工具Hive,對(duì)于Spark 生態(tài)圈,則需要講授SparkRDD各種算子的使用、Spark Streaming、Spark SQL 和MLlib的使用,掌握這部分核心知識(shí),能夠讓學(xué)生快速構(gòu)建出大型的離線(xiàn)或?qū)崟r(shí)的應(yīng)用項(xiàng)目。另外,要完成完整的大數(shù)據(jù)分析處理應(yīng)用,除了上述核心技術(shù),數(shù)據(jù)采集、數(shù)據(jù)可視化等過(guò)程也是必不可少的,課程將選取相關(guān)典型的技術(shù)進(jìn)行講授,如數(shù)據(jù)采集中的Kafka、Flume和Sqoop等技術(shù)。通過(guò)向?qū)W生展示大數(shù)據(jù)知識(shí)體系,讓學(xué)生對(duì)大數(shù)據(jù)技術(shù)有宏觀(guān)的認(rèn)識(shí),在課程學(xué)習(xí)過(guò)程中,逐漸形成自己的學(xué)習(xí)路線(xiàn)和建立起自己的大數(shù)據(jù)知識(shí)體系[4]。
圖1 大數(shù)據(jù)知識(shí)體系
大數(shù)據(jù)知識(shí)體系涉及的知識(shí)較多,由于學(xué)時(shí)數(shù)限制,將根據(jù)當(dāng)前主流技術(shù)選擇典型的進(jìn)行講解,同時(shí)為了讓學(xué)生由淺入深的掌握多種技術(shù),對(duì)每一種技術(shù)的講解將劃分為基礎(chǔ)層、提高層和綜合層,如表1 所示?;A(chǔ)層包含對(duì)技術(shù)組件的基本概念、適用場(chǎng)景、基礎(chǔ)操作和編程開(kāi)發(fā),通過(guò)本部分的學(xué)習(xí)學(xué)生可掌握該組件的基本特點(diǎn)和使用,能開(kāi)發(fā)單獨(dú)的基于該組件的應(yīng)用程序;提高層則會(huì)進(jìn)一步講解組件的設(shè)計(jì)架構(gòu),在掌握基本操作的基礎(chǔ)上讓學(xué)生體會(huì)安裝運(yùn)維的過(guò)程,同時(shí)會(huì)講解影響平臺(tái)和應(yīng)用程序性能的參數(shù),讓學(xué)生能夠在平臺(tái)運(yùn)行出現(xiàn)問(wèn)題的時(shí)候發(fā)現(xiàn)錯(cuò)誤,并能夠?qū)ζ脚_(tái)運(yùn)行性能進(jìn)行參數(shù)優(yōu)化;綜合層則在前面知識(shí)的基礎(chǔ)上,講授大數(shù)據(jù)典型應(yīng)用場(chǎng)景及架構(gòu),結(jié)合真實(shí)案例讓學(xué)生進(jìn)行實(shí)訓(xùn),完成大數(shù)據(jù)工程技術(shù)實(shí)踐環(huán)節(jié)[5]。
表1 課程層次設(shè)計(jì)
大數(shù)據(jù)技術(shù)涵蓋了從數(shù)據(jù)獲取、數(shù)據(jù)存儲(chǔ)、數(shù)據(jù)處理、數(shù)據(jù)可視化等多個(gè)方面,課程中將選擇典型技術(shù)組件進(jìn)行講授,并設(shè)計(jì)多層次的學(xué)習(xí)路線(xiàn),使學(xué)生能夠由淺入深更加清晰地掌握該技術(shù)組件的使用方法及應(yīng)用場(chǎng)合。
HDFS提供了多種訪(fǎng)問(wèn)方式,常用的方式有命令行接口、Java API,這些知識(shí)將是HDFS使用的基礎(chǔ)。
2.1.1 命令行接口方式
命令行接口訪(fǎng)問(wèn)HDFS 的方式較為簡(jiǎn)單且固定,且非常類(lèi)似Linux 系統(tǒng)命令,學(xué)生可按照表2 的操作命令完成實(shí)驗(yàn)以熟悉基本的操作命令[6]。
表2 HDFS命令行基本操作
2.1.2 Java API訪(fǎng)問(wèn)方式
對(duì)應(yīng)于命令行接口的訪(fǎng)問(wèn)方式,HDFS 提供給用戶(hù)Java API進(jìn)行訪(fǎng)問(wèn),同樣可以完成文件目錄創(chuàng)建、文件上傳、下載、刪除等操作,在應(yīng)用開(kāi)發(fā)時(shí)需要采取這種訪(fǎng)問(wèn)方式來(lái)實(shí)現(xiàn)??勺寣W(xué)生通過(guò)實(shí)現(xiàn)表2 中的基本操作來(lái)熟練掌握J(rèn)ava API的訪(fǎng)問(wèn)方式。
學(xué)生在掌握基本操作的基礎(chǔ)上,可進(jìn)一步掌握HDFS的安裝運(yùn)維排錯(cuò)以及平臺(tái)的調(diào)優(yōu),這將對(duì)日后從事大數(shù)據(jù)技術(shù)運(yùn)維相關(guān)工作奠定基礎(chǔ)。在提高層,需要學(xué)生掌握安裝過(guò)程各配置步驟的目的,進(jìn)而能夠準(zhǔn)確判斷出發(fā)生錯(cuò)誤的位置并解決問(wèn)題;同時(shí),了解影響HDFS特性的配置參數(shù),能夠?qū)ζ脚_(tái)參數(shù)進(jìn)行優(yōu)化配置。
2.2.1 安裝
HDFS的安裝將讓學(xué)生掌握Linux 系統(tǒng)中軟件的安裝配置過(guò)程,采用分布式安裝模式,主要過(guò)程有Linux 系統(tǒng)配置、Hadoop2.0 安裝及配置、Hadoop 的啟動(dòng)[7]。
(1)Linux系統(tǒng)配置。Linux系統(tǒng)配置主要完成基礎(chǔ)操作系統(tǒng)環(huán)境的配置,主要步驟如表3 所示。
表3 Linux系統(tǒng)配置項(xiàng)目
(2)Hadoop2.0 安裝及配置。配置完Linux 系統(tǒng)環(huán)境后,將安裝Hadoop2.0,具體步驟如表4 所示。
表4 Hadoop2.0 安裝及配置項(xiàng)目
(3)Hadoop的啟動(dòng)。安裝完成之后,Hadoop啟動(dòng)過(guò)程如表5 所示。
2.2.2 運(yùn)維
HDFS運(yùn)維將涉及的內(nèi)容較多,課程中將主要講述一些基本的錯(cuò)誤及排錯(cuò)方法,同時(shí)將在實(shí)驗(yàn)指導(dǎo)過(guò)程中設(shè)置一些錯(cuò)誤讓學(xué)生去解決,并且熟練掌握一些常用命令的使用及信息的查看,常用管理命令如表6所示[6]。
表5 Hadoop的啟動(dòng)
表6 HDFS管理命令
2.2.3 調(diào)優(yōu)
HDFS調(diào)優(yōu)可從架構(gòu)、參數(shù)等不同角度來(lái)進(jìn)行,架構(gòu)調(diào)優(yōu)難度較高,需要從源碼角度來(lái)解決HDFS 存在的一些缺點(diǎn),如小文件存儲(chǔ)問(wèn)題,課程將主要講述參數(shù)調(diào)優(yōu),即與HDFS性能相關(guān)的配置參數(shù),學(xué)生將通過(guò)實(shí)驗(yàn)來(lái)體會(huì)不同的配置參數(shù)對(duì)存儲(chǔ)的影響,進(jìn)一步可繪制性能曲線(xiàn)讓學(xué)生觀(guān)察參數(shù)對(duì)性能的影響以及不同參數(shù)之間的相互影響。對(duì)HDFS 影響較大的參數(shù)有很多,表7 中列舉了部分常用配置參數(shù)[8]。
表7 HDFS配置參數(shù)
在學(xué)習(xí)了基礎(chǔ)層和提高層的相關(guān)知識(shí)后,學(xué)生將對(duì)單一的大數(shù)據(jù)技術(shù)組件有了較好的理解,在實(shí)際生產(chǎn)環(huán)境中,往往是多種技術(shù)組件的組合使用,這就要求學(xué)生掌握面對(duì)不同的應(yīng)用場(chǎng)景時(shí)如何進(jìn)行技術(shù)選型和架構(gòu)設(shè)計(jì),課程中將提供多個(gè)不同的教學(xué)案例讓學(xué)生進(jìn)行實(shí)踐,目前可提供的學(xué)習(xí)案例如表8 所示。通過(guò)這些真實(shí)的大數(shù)據(jù)項(xiàng)目,學(xué)生可以把之前學(xué)習(xí)的各種技術(shù)貫穿,學(xué)習(xí)大數(shù)據(jù)項(xiàng)目從數(shù)據(jù)采集、預(yù)處理、存儲(chǔ)、分析處理到可視化的完整過(guò)程,理解整個(gè)架構(gòu)的設(shè)計(jì),并在實(shí)踐過(guò)程中解決遇到的問(wèn)題和難點(diǎn)[9-12]。
表8 教學(xué)案例
2.3.1 技術(shù)選型
大數(shù)據(jù)技術(shù)選型主要根據(jù)應(yīng)用需求進(jìn)行各種組件的組合、軟件版本的選擇,并讓各種組件協(xié)調(diào)起來(lái)完成整體的功能,這就需要學(xué)生了解不同組件的特點(diǎn)以及適用場(chǎng)景,圖2 展示了大數(shù)據(jù)生態(tài)圈從數(shù)據(jù)聚合層到高級(jí)分析應(yīng)用層所提供的不同技術(shù)組件[13]。其中,大數(shù)據(jù)技術(shù)的一大挑戰(zhàn)即多源異構(gòu)數(shù)據(jù),如數(shù)據(jù)庫(kù)數(shù)據(jù)、日志數(shù)據(jù)、網(wǎng)頁(yè)數(shù)據(jù)等,針對(duì)不同類(lèi)型的數(shù)據(jù),數(shù)據(jù)聚合層將提供不同的工具進(jìn)行數(shù)據(jù)采集,如針對(duì)數(shù)據(jù)庫(kù)的Sqoop、針對(duì)網(wǎng)頁(yè)的爬蟲(chóng)Nutch 等,通過(guò)這些工具采集完數(shù)據(jù)后將數(shù)據(jù)存儲(chǔ)到數(shù)據(jù)存儲(chǔ)層的HDFS 中,這些數(shù)據(jù)即可供后續(xù)過(guò)程進(jìn)行分析處理,數(shù)據(jù)處理層提供了基本的數(shù)據(jù)處理接口供用戶(hù)編程使用,高層訪(fǎng)問(wèn)接口層則提供了許多易用的數(shù)據(jù)訪(fǎng)問(wèn)處理方式,如類(lèi)SQL語(yǔ)句的Hive,最終在應(yīng)用中由高級(jí)分析應(yīng)用層所提供的工具進(jìn)行數(shù)據(jù)挖掘以及數(shù)據(jù)可視化的工作。
圖2 大數(shù)據(jù)生態(tài)圈技術(shù)組件
2.3.2 架構(gòu)設(shè)計(jì)
架構(gòu)設(shè)計(jì)將對(duì)典型的大數(shù)據(jù)架構(gòu)進(jìn)行講述,如離線(xiàn)分析架構(gòu)、流式架構(gòu)、Lambda 架構(gòu)、Kappa 架構(gòu)等,然后由學(xué)生對(duì)課程提供的教學(xué)案例進(jìn)行設(shè)計(jì)與實(shí)現(xiàn),以搜狗搜索日志數(shù)據(jù)分析為例,該應(yīng)用場(chǎng)景是非常典型的離線(xiàn)分析架構(gòu),其架構(gòu)設(shè)計(jì)如圖3 所示。
圖3 搜狗日志分析架構(gòu)圖
日志數(shù)據(jù)將通過(guò)數(shù)據(jù)采集工具導(dǎo)入到匯聚服務(wù)器中,該過(guò)程將對(duì)數(shù)據(jù)質(zhì)量進(jìn)行監(jiān)控并對(duì)有問(wèn)題的數(shù)據(jù)進(jìn)行數(shù)據(jù)預(yù)處理,然后將清洗后的數(shù)據(jù)加載到HDFS存儲(chǔ)中,采用計(jì)算框架MapReduce 或Spark 可進(jìn)行數(shù)據(jù)分析,也可采用Hive 提供的高層接口進(jìn)行數(shù)據(jù)訪(fǎng)問(wèn),此類(lèi)分析是典型的數(shù)據(jù)倉(cāng)庫(kù)類(lèi)業(yè)務(wù)架構(gòu),另外可通過(guò)數(shù)據(jù)挖掘技術(shù)如Mahout 等對(duì)存儲(chǔ)在HDFS 中的數(shù)據(jù)進(jìn)行分析處理,將挖掘結(jié)果保存在HBase 中,滿(mǎn)足用戶(hù)進(jìn)行在線(xiàn)查詢(xún)分析的需求。
2.3.3 實(shí)驗(yàn)設(shè)計(jì)
(1)數(shù)據(jù)預(yù)處理。搜狗搜索日志數(shù)據(jù)的數(shù)據(jù)格式為中間以“\t”分隔的文本類(lèi)型,數(shù)據(jù)記錄有500 萬(wàn)條,其字段含義如表9 所示。其中,用戶(hù)ID是根據(jù)用戶(hù)使用瀏覽器訪(fǎng)問(wèn)搜索引擎時(shí)的Cookie 信息自動(dòng)賦值,即同一次使用瀏覽器輸入的不同查詢(xún)對(duì)應(yīng)同一個(gè)用戶(hù)ID。
表9 數(shù)據(jù)字段及含義
數(shù)據(jù)預(yù)處理過(guò)程將解決中文亂碼、數(shù)據(jù)擴(kuò)展以及數(shù)據(jù)過(guò)濾等問(wèn)題,具體來(lái)說(shuō),中文亂碼問(wèn)題完成數(shù)據(jù)由GBK到UTF-8 的編碼轉(zhuǎn)換,數(shù)據(jù)擴(kuò)展將訪(fǎng)問(wèn)時(shí)間字段拆分為年、月、日、小時(shí)4 個(gè)字段,數(shù)據(jù)過(guò)濾則過(guò)濾掉“用戶(hù)ID”和“查詢(xún)?cè)~”字段中字段值為空的記錄。經(jīng)過(guò)預(yù)處理后,將數(shù)據(jù)加載到HDFS中。
(2)基于Hive 構(gòu)建數(shù)據(jù)倉(cāng)庫(kù)。在該階段,基于Hive構(gòu)建搜狗搜索日志數(shù)據(jù)倉(cāng)庫(kù),將建立外部表sg_20111230 和根據(jù)日期字段建立分區(qū)表sg_partition,并根據(jù)兩張表完成主題分析,分析主題如表10 所示。下面將以比較復(fù)雜的幾個(gè)分析子需求進(jìn)行描述。
①查詢(xún)次數(shù)大于2 次的用戶(hù)展示。以“用戶(hù)UID分析”中的查詢(xún)次數(shù)大于2 次的用戶(hù)為例,其處理代碼和結(jié)果展示如圖4 所示(該結(jié)果為Hue 工具提供的可視化查詢(xún)界面)。
表10 搜狗搜索日志數(shù)據(jù)分析需求
圖4 搜狗日志數(shù)據(jù)分析示例
② 點(diǎn)擊次數(shù)與Rank 之間的關(guān)系分析。查詢(xún)Rank在10 以?xún)?nèi)的點(diǎn)擊次數(shù)占比,過(guò)程如下:
A:select count(*)from sg_20111230 where rank <11;
B:select count(*)from sg_20111230;
A查詢(xún)表示數(shù)據(jù)中Rank 小于11 次的記錄條數(shù),B查詢(xún)表示數(shù)據(jù)總條數(shù),獲取A 和B 的結(jié)果后,通過(guò)計(jì)算A/B即可得到分析結(jié)果。學(xué)生可以觀(guān)察到,用戶(hù)大多數(shù)只訪(fǎng)問(wèn)位于搜索結(jié)果第一頁(yè)(即Rank 在10 以?xún)?nèi)的)的頁(yè)面,這種用戶(hù)行為符合大多數(shù)搜索引擎使用者的使用習(xí)慣,即最常瀏覽的頁(yè)面位于搜索結(jié)果的前幾個(gè)。
③直接輸入U(xiǎn)RL作為查詢(xún)?cè)~的比例。直接輸入U(xiǎn)RL查詢(xún)可通過(guò)模糊查詢(xún)得出,然后在直接輸入U(xiǎn)RL的查詢(xún)中,訪(fǎng)問(wèn)URL 的總數(shù)就是用戶(hù)輸入U(xiǎn)RL 查詢(xún)?nèi)缓笤L(fǎng)問(wèn)的數(shù)量,分析過(guò)程如下:
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查詢(xún)表示關(guān)鍵字字段中包含“www”的記錄條數(shù),B查詢(xún)表示URL 包含keyword 的查詢(xún)結(jié)果的記錄條數(shù),獲取A和B 的結(jié)果后,通過(guò)計(jì)算B/A 即可得到分析結(jié)果,從這個(gè)比例可以看出,很大一部分用戶(hù)在借助搜索引擎查找時(shí),往往由于不能記住全部的網(wǎng)址,這時(shí)用戶(hù)會(huì)對(duì)部分URL進(jìn)行查找,以期找到想要瀏覽的網(wǎng)頁(yè)。基于此分析在搜索引擎處理此類(lèi)查詢(xún)時(shí),可考慮將包含該查詢(xún)關(guān)鍵字的完整URL反饋給用戶(hù),往往在很大概率上符合用戶(hù)的查詢(xún)請(qǐng)求。
通過(guò)在大數(shù)據(jù)工程實(shí)踐課程中采用多層次教學(xué)設(shè)計(jì),將厘清大數(shù)據(jù)各種技術(shù)的學(xué)習(xí)路線(xiàn),由淺入深、由易到難,讓學(xué)生可以更好地有針對(duì)性地進(jìn)行學(xué)習(xí),同時(shí)以實(shí)際工程案例為背景作為綜合層的學(xué)習(xí)內(nèi)容,逼真地模擬了現(xiàn)實(shí)大數(shù)據(jù)分析場(chǎng)景,更加容易激發(fā)學(xué)生的學(xué)習(xí)興趣,學(xué)生在“分析問(wèn)題-實(shí)現(xiàn)方案-解決問(wèn)題”的過(guò)程中提高了“解決復(fù)雜工程問(wèn)題”的能力[14]。