劉引濤
(陜西工業(yè)職業(yè)技術(shù)學(xué)院,陜西 咸陽 712000)
由于“互聯(lián)網(wǎng)+”的飛速發(fā)展,移動(dòng)互聯(lián)網(wǎng)在線學(xué)習(xí)平臺(tái)成為一種新型學(xué)習(xí)方式,教育信息化開啟了互聯(lián)網(wǎng)在線學(xué)習(xí)的信息化[1],催生了各種在線學(xué)習(xí)平臺(tái)的普及與應(yīng)用,因此需要一種新技術(shù)解決消息請(qǐng)求響應(yīng),實(shí)時(shí)交叉、吞吐等過程中數(shù)據(jù)不完整的問題[2]。
在數(shù)據(jù)處理方式上,一般開發(fā)平臺(tái)會(huì)選擇Batch或Storm模型。傳統(tǒng)的Batch形式已無法完全滿足多途徑多部門管理的數(shù)據(jù)處理,尤其是在對(duì)各業(yè)的務(wù)數(shù)據(jù)的獲取和分析上,目前需要一種實(shí)時(shí)分析的數(shù)據(jù)處理方法,而Storm對(duì)實(shí)時(shí)流數(shù)據(jù)的處理具有實(shí)時(shí)性、可靠性、完整性及可擴(kuò)展性的優(yōu)勢(shì);對(duì)于大數(shù)據(jù)分析平臺(tái)而言,技術(shù)選擇一般使用Spark-streaming,部分技術(shù)實(shí)力雄厚的公司會(huì)進(jìn)行專門程序的開發(fā)與信息處理。平臺(tái)開發(fā)主要是對(duì)業(yè)務(wù)需求的實(shí)現(xiàn),而對(duì)于實(shí)時(shí)數(shù)據(jù)引用的穩(wěn)定性、數(shù)據(jù)和信息的共享性及分析處理系統(tǒng)無法達(dá)到統(tǒng)一。從系統(tǒng)開發(fā)的穩(wěn)定性和成熟度出發(fā),選擇Storm作為實(shí)時(shí)平臺(tái)的開發(fā)數(shù)據(jù)處理方案是一種較為理想的做法。本文的研究探索主要將Storm技術(shù)應(yīng)用于移動(dòng)互聯(lián)網(wǎng)在線學(xué)習(xí)平臺(tái),可促進(jìn)該系統(tǒng)的優(yōu)化改進(jìn)。
移動(dòng)互聯(lián)在線學(xué)習(xí)平臺(tái)在“互聯(lián)網(wǎng)+”背景下得到了快速響應(yīng)與發(fā)展,并在教育教學(xué)中得到了推廣與應(yīng)用,因?qū)W習(xí)平臺(tái)在運(yùn)行過程中會(huì)產(chǎn)生大量數(shù)據(jù),如學(xué)習(xí)者登錄學(xué)習(xí)平臺(tái)后點(diǎn)擊的文檔、視頻、音頻會(huì)讓平臺(tái)在任意時(shí)間面臨多種數(shù)據(jù)查詢的請(qǐng)求,該運(yùn)行數(shù)據(jù)具有類型多樣、規(guī)模繁雜等特點(diǎn),傳統(tǒng)的分散性業(yè)務(wù)系統(tǒng)與平臺(tái)已難以滿足當(dāng)前移動(dòng)互聯(lián)網(wǎng)大數(shù)據(jù)平臺(tái)的要求[3]。
移動(dòng)互聯(lián)網(wǎng)在線學(xué)習(xí)平臺(tái)的數(shù)據(jù)來源主要是學(xué)習(xí)者學(xué)習(xí)、瀏覽、討論、留言、答疑、測(cè)試等全部學(xué)習(xí)活動(dòng)的記錄軌跡,并將活動(dòng)記錄傳遞到學(xué)習(xí)功能服務(wù)器。由功能服務(wù)器收集、計(jì)算、處理、存儲(chǔ)學(xué)習(xí)者的學(xué)習(xí)情況。學(xué)習(xí)功能服務(wù)器通過使用Storm對(duì)實(shí)時(shí)數(shù)據(jù)進(jìn)行快速清洗、格式轉(zhuǎn)換、數(shù)據(jù)分析,設(shè)計(jì)實(shí)現(xiàn)可降低請(qǐng)求響應(yīng)時(shí)間,解決數(shù)據(jù)庫因連接限制而丟失數(shù)據(jù)的問題。重點(diǎn)在于集成多種數(shù)據(jù),分析挖掘數(shù)據(jù)的可視化等方面。
數(shù)據(jù)讀取、處理環(huán)節(jié)主要通過Storm的Topology編程模型中的Spout組件和Bolt組件完成,其中Spout組件主要完成數(shù)據(jù)讀取,Bolt組件主要完成任務(wù)處理,使用Topology編程模型的目的在于降低處理延遲[4-5]。
在線學(xué)習(xí)平臺(tái)為學(xué)習(xí)者提供了專屬的學(xué)習(xí)環(huán)境,學(xué)習(xí)者可多終端學(xué)習(xí),授課教師、助教、企業(yè)導(dǎo)師等完成學(xué)習(xí)討論,通過隨堂練習(xí)及時(shí)檢驗(yàn)學(xué)習(xí)成果。
移動(dòng)互聯(lián)網(wǎng)在線學(xué)習(xí)平臺(tái)要應(yīng)對(duì)突發(fā)的大數(shù)據(jù)量請(qǐng)求,提出數(shù)據(jù)源、大數(shù)據(jù)平臺(tái)和業(yè)務(wù)應(yīng)用三層數(shù)據(jù)處理結(jié)構(gòu),根據(jù)數(shù)據(jù)來源不同,將數(shù)據(jù)分為內(nèi)部和外部兩種,在線學(xué)習(xí)平臺(tái)的內(nèi)部數(shù)據(jù)主要來源于后臺(tái)管理平臺(tái)、課程管理平臺(tái)和資源管理系統(tǒng)平臺(tái),外部數(shù)據(jù)主要來源于創(chuàng)建者的專屬課程搭建平臺(tái)、在線學(xué)習(xí)系統(tǒng)平臺(tái)和互動(dòng)管理平臺(tái)[6]。
在線學(xué)習(xí)平臺(tái)的優(yōu)化架構(gòu)中每個(gè)模塊的功能實(shí)現(xiàn)主要通過Memcached,F(xiàn)lume,Storm,Kafka技術(shù)實(shí)現(xiàn)數(shù)據(jù)收集、數(shù)據(jù)緩沖、數(shù)據(jù)處理與數(shù)據(jù)存儲(chǔ)[7]。這里將優(yōu)化方案應(yīng)用到網(wǎng)絡(luò)學(xué)習(xí)平臺(tái)中進(jìn)行分析對(duì)比,對(duì)總體架構(gòu)的環(huán)境進(jìn)行搭建和部署。學(xué)習(xí)者通過課程學(xué)習(xí)、討論、測(cè)試等形成數(shù)據(jù)流,由互動(dòng)管理實(shí)現(xiàn)多維度統(tǒng)計(jì),并通過Storm架構(gòu)進(jìn)行流數(shù)據(jù)處理。在線學(xué)習(xí)平臺(tái)大數(shù)據(jù)框架如圖1所示。
圖1 在線學(xué)習(xí)平臺(tái)構(gòu)架
Storm架構(gòu)采用一個(gè)主進(jìn)程和多個(gè)從進(jìn)程的主從架構(gòu)模式,對(duì)該進(jìn)程配置時(shí),主要依靠ZooKeeper進(jìn)程完成主進(jìn)程和多個(gè)從進(jìn)程之間的協(xié)調(diào),需將ZooKeeper進(jìn)程同時(shí)配置到集群的每個(gè)節(jié)點(diǎn)上。ZooKeeper進(jìn)程主要保證各服務(wù)器之間的流數(shù)據(jù)同步。ZooKeeper角色分析見表1所列。
表1 ZooKeeper角色分析一覽表
運(yùn)用Storm完成數(shù)據(jù)的接收與邏輯運(yùn)算,Storm在進(jìn)行數(shù)據(jù)處理時(shí)主要通過Spout讀取逐條記錄,并通過Bolt1對(duì)不符合要求的數(shù)據(jù)進(jìn)行篩查,Bolt2將統(tǒng)計(jì)結(jié)果存儲(chǔ)或更新至數(shù)據(jù)庫,拓?fù)銽opology完成數(shù)據(jù)處理。在集群狀態(tài)下,運(yùn)用ZooKeeper進(jìn)程保證數(shù)據(jù)的完整性和一致性。
通過安裝Storm系統(tǒng)依賴包與工具包,在若干個(gè)節(jié)點(diǎn)機(jī)構(gòu)集群上搭建Storm開發(fā)環(huán)境,依賴安裝包主要包括python,jdk,gcc_c++,libuuid,uuid,libtool,libuuid-devel等;在安裝所需工具上使用ZooKeeper封裝關(guān)鍵服務(wù),防止協(xié)調(diào)系統(tǒng)出錯(cuò),將簡(jiǎn)單易用、性能高效、穩(wěn)定的接口提供給用戶;使用ZerMQ屏蔽網(wǎng)絡(luò)編程,安裝ZerMQ用于處理一個(gè)消息隊(duì)列,實(shí)現(xiàn)多個(gè)線程、內(nèi)核和主機(jī)盒之間的靈活伸縮[8]。
Storm主要實(shí)現(xiàn)主程序設(shè)計(jì),可方便在任一計(jì)算機(jī)集群中編寫與擴(kuò)展復(fù)雜的實(shí)時(shí)計(jì)算,保證每個(gè)消息都能被及時(shí)處理并集中在一個(gè)小集群中,實(shí)現(xiàn)每秒處理百萬消息。
環(huán)境搭建主要步驟(以4個(gè)集群為例):
步驟一:修改文件用戶屬性:#chow -r root:root/home/local/storm
步驟二:編輯prof i le文件:# vi/etc/prof i le
Export storm_home=/home/local/storm
Export PATH=$PATH:$STORM_HOME/bin;
步驟三:修改環(huán)境變量:#source/etc/prof i le;
步驟四:修改storm參數(shù):# vi/home/local/ storm/conf/storm.yaml
步驟五:添加如下內(nèi)容:
Storm.zookeeper.servers:
-“node1”
-“node2”
-“node3”
-“node4”
Nimbus.host:“node1”
Storm. Local.dir:” home/local/ storm/temp”
Storm.zookeeper.port:2181
Supervisor.slots.ports:
-6700
-6701
-6702
-6703
步驟六:新建temp:#mkdir/home/local/storm/temp
Storm開發(fā)環(huán)境需要在若干個(gè)節(jié)點(diǎn)機(jī)上分別安裝相同的工具包,可從node1節(jié)點(diǎn)機(jī)上復(fù)制軟件到其他節(jié)點(diǎn)機(jī)上,并分別修改環(huán)境變量和配置文件,主要通過如下兩個(gè)步驟實(shí)現(xiàn):
(1)使用scp-r復(fù)制文件到其他節(jié)點(diǎn)機(jī)上(# scp-r /home/local root@node n :/home/local);
(2)分別登錄節(jié)點(diǎn)機(jī)修改環(huán)境變量,環(huán)境變量生效(#source/ect/prof i le)后根據(jù)zoo.cfg中server.id的ID值修改各節(jié)點(diǎn)機(jī)ZooKeeper_home/data/myid的內(nèi)容。
移動(dòng)互聯(lián)在線學(xué)習(xí)平臺(tái)中的流數(shù)據(jù)處理是對(duì)在線學(xué)習(xí)平臺(tái)的管理、運(yùn)行、監(jiān)控過程中產(chǎn)生的實(shí)時(shí)數(shù)據(jù)流提供有效數(shù)據(jù)的一種處理機(jī)制。筆者選擇Storm作為計(jì)算系統(tǒng),該系統(tǒng)具備高效的數(shù)據(jù)實(shí)時(shí)分析功能[9]。在線課程平臺(tái)流數(shù)據(jù)處理架構(gòu)如圖2所示。
系統(tǒng)從數(shù)據(jù)來源、Storm計(jì)算平臺(tái)及流處理三個(gè)環(huán)節(jié)入手,分析在線學(xué)習(xí)平臺(tái)中所獲取、處理及存儲(chǔ)的數(shù)據(jù)。系統(tǒng)在完成數(shù)據(jù)收集及預(yù)處理后,將收集的完整、正確的數(shù)據(jù)提供給實(shí)時(shí)應(yīng)用系統(tǒng),并將不完整的數(shù)據(jù)處理成為標(biāo)準(zhǔn)化數(shù)據(jù),通過業(yè)務(wù)邏輯對(duì)數(shù)據(jù)進(jìn)行分析,最后將處理結(jié)果存儲(chǔ)在數(shù)據(jù)庫中。
圖2 在線課程平臺(tái)流數(shù)據(jù)處理架構(gòu)
數(shù)據(jù)存儲(chǔ)主要采用關(guān)系型數(shù)據(jù)庫存儲(chǔ)數(shù)據(jù),在關(guān)系型數(shù)據(jù)庫前加上Memcached暫存數(shù)據(jù),保證數(shù)據(jù)連接池中數(shù)據(jù)的完整性并解決數(shù)據(jù)存儲(chǔ)和處理速度不一致問題,所有存儲(chǔ)過程由Storm中的Bolt組件完成[10]。為保證數(shù)據(jù)的完整性和一致性,系統(tǒng)運(yùn)用ZooKeeper的鎖機(jī)制來解決這一問題。
解決方法的核心代碼如下:
interprocessMuter lock=
new interprocessMutex(LockCuratorSrc.getCF(),Constant.
LOCKS_ORDER);
try{while(lock.acquire(5,timeUnit.Minutes))
BREAK;
LOCK.RELEASE();
在移動(dòng)互聯(lián)在線學(xué)習(xí)平臺(tái)開發(fā)應(yīng)用的背景下,通過對(duì)學(xué)習(xí)者行為數(shù)據(jù)的深入研究,在線學(xué)習(xí)系統(tǒng)服務(wù)的大數(shù)據(jù)平臺(tái)管理成為一種發(fā)展新趨勢(shì)。在理論研究的基礎(chǔ)上,根據(jù)在線學(xué)習(xí)平臺(tái)的特點(diǎn)及需求,提出大數(shù)據(jù)平臺(tái)架構(gòu),針對(duì)在線學(xué)習(xí)平臺(tái)的流數(shù)據(jù)處理,將流數(shù)據(jù)處理技術(shù)Storm與在線學(xué)習(xí)平臺(tái)開發(fā)相結(jié)合,提出實(shí)時(shí)數(shù)據(jù)的處理方案。