吳婷 胡必波 譚澤榮 肖健
摘? ?要:基于Serverless無服務(wù)器架構(gòu)搭建的知曉云校園導(dǎo)覽小程序,提出了一種Hadoop和Spark統(tǒng)一部署的校園導(dǎo)覽大數(shù)據(jù)分析設(shè)計方案,并對構(gòu)建該平臺的關(guān)鍵技術(shù)和步驟進行說明。實踐驗證,相對以往單一Hadoop平臺,文章所構(gòu)建的混合平臺具有計算資源按需伸縮、集群利用率高、避免數(shù)據(jù)跨集群遷移等優(yōu)勢,更適應(yīng)企業(yè)實際使用。
關(guān)鍵詞:Hadoop;Spark分布式計算;批處理;流計算
微信小程序是一種輕量級的APP,不需要下載、安裝即可使用[1]。它是一個基于去中心化而存在的平臺,沒有聚合的入口,可以通過搜索、社交分享、掃一掃、微信支付等多種方式進入[2]。
Hadoop是實現(xiàn)了分布并行處理任務(wù)的系統(tǒng)框架,主要由Hadoop分布式文件系統(tǒng)(Hadoop Distributed File System,HDFS),MapReduce和Hbase等組成,框架的核心設(shè)計是HDFS和MapReduce[3],具有成本低、高性能計算、高擴展性、高容錯性等突出的優(yōu)勢。Spark是基于內(nèi)存計算的大數(shù)據(jù)并行計算框架,主要由Spark Core,Spark Streaming等組成,具有易用性、通用性、運行速度快、運行模式多樣等突出優(yōu)勢。
為加快校園數(shù)字化進程以及方便師生或周邊人士對校園地理環(huán)境進行了解,本團隊開發(fā)了知曉云校園導(dǎo)覽微信小程序,服務(wù)內(nèi)容涵蓋地理位置、學(xué)習(xí)與生活導(dǎo)覽,在給用戶帶來方便的同時,也產(chǎn)生了很多用戶訪問量,并積累了很多用戶數(shù)據(jù)?;贖adoop構(gòu)建校園導(dǎo)覽服務(wù)大數(shù)據(jù)分析處理平臺,可以采集、分析和展示導(dǎo)覽數(shù)據(jù),深入了解用戶,更好地提供校園導(dǎo)覽服務(wù)。
1? ? 技術(shù)原理
1.1? 分布式存儲
Hadoop HDFS是對Google GFS的開源實現(xiàn),支持以流式數(shù)據(jù)訪問模式來存取超大文件,可活動于廉價服務(wù)器集群上。HDFS采用主從結(jié)構(gòu)模型[4],一個HDFS集群包括一個NameNode和若干DataNode。NameNode作為中心服務(wù)器,負責(zé)管理文件系統(tǒng)的命名空間及客戶端對文件的訪問。DataNode作為單獨節(jié)點運行,負責(zé)處理文件系統(tǒng)客戶端的讀/寫請求,在NameNode統(tǒng)一調(diào)度下進行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制等操作。
1.2? 分布式計算
Hadoop MapReduce是對Google MapReduce的開源實現(xiàn),支持在HDFS上運行分布式計算模型[5],核心思想是“分而治之,迭代匯總”。MapReduce通過Map運行的任務(wù)讀取HDFS中的數(shù)據(jù)文件,Map函數(shù)將小數(shù)據(jù)集進一步解析成一批
2? ? 系統(tǒng)設(shè)計
知曉云是一款基于Serverless無服務(wù)器架構(gòu)的小程序開發(fā)工具,在知曉云平臺開發(fā)校園導(dǎo)覽微信小程序,可以免去小程序開發(fā)中服務(wù)器搭建、域名備案、數(shù)據(jù)接口實現(xiàn)等繁瑣流程,一站式解決校園場館室內(nèi)外地圖導(dǎo)覽、定位的業(yè)務(wù)系統(tǒng)搭建難題,同時支持小程序、網(wǎng)頁和APP多平臺互動[6]。知曉云校園導(dǎo)覽系統(tǒng)可分為小程序客戶端、管理后端(知曉云服務(wù)端)、第三方支付等3層,作為大數(shù)據(jù)分析處理平臺的數(shù)據(jù)來源。
Hadoop雖然已成為大數(shù)據(jù)技術(shù)事實標準,但其本身還存在表達能力有限、磁盤輸入/輸出(Input/Output,IO)開銷大、延遲高等諸多缺陷,最主要的缺陷是MapReduce計算模型延遲過高,無法勝任實時、快速計算的需求,只適應(yīng)離線批處理的應(yīng)用場景。Spark分布式計算借鑒了Hadoop MapReduce的優(yōu)點,將計算數(shù)據(jù)、中間結(jié)果都存儲在內(nèi)存中,大大減少了I/O開銷,很好地解決了MapReduce所面臨的問題,更適合迭代運算較多的數(shù)據(jù)挖掘與機器學(xué)習(xí)運算。
盡管Spark相對于Hadoop而言有較大優(yōu)勢,但Spark并不能完全替代Hadoop,主要用于替代Hadoop中的MapReduce計算模型。Spark的設(shè)計遵循“一個軟件棧滿足不同應(yīng)用場景”的理念,例如Spark Core應(yīng)對復(fù)雜批處理數(shù)據(jù)處理(時間跨度數(shù)十分鐘到數(shù)小時之間)、Spark SQL應(yīng)對歷史數(shù)據(jù)的交互式查詢(時間跨度數(shù)十秒到數(shù)分鐘之間)、Spark Streaming應(yīng)對實時數(shù)據(jù)流的數(shù)據(jù)處理(時間跨度在數(shù)百毫秒到數(shù)秒之間)等。
一方面,Hadoop生態(tài)體系中一些組件所實現(xiàn)的功能,目前Spark還是無法取代。另一方面,基于現(xiàn)有的Hadoop組件開發(fā),完全轉(zhuǎn)移到Spark上需要一定的成本??紤]到Hadoop MapReduce,Storm和Spark等都可以運行在資源框架之上,在資源協(xié)調(diào)者(Yet Another Resource Negotiator,YARN)之上進行統(tǒng)一部署可以將不同計算框架統(tǒng)一運行在YARN中,構(gòu)建校園導(dǎo)覽大數(shù)據(jù)分析平臺。
3? ? 關(guān)鍵步驟
3.1? Hadoop分布式集群搭建
在Hadoop中主要使用深度優(yōu)先搜索(Depth-First-Search,DFS)進程和另一種YARN進程,需要搭建DFS集群和YARN集群。實現(xiàn)實時流數(shù)據(jù)計算需要先搭建Zookeeper協(xié)調(diào)服務(wù)集群,解決分布式應(yīng)用一致性問題,再搭建Kafka集群,實現(xiàn)實時數(shù)據(jù)流緩存,最后搭建Spark集群,實現(xiàn)數(shù)據(jù)流分析與處理。
3.2? 數(shù)據(jù)采集層
本層主要工作是通過Flume,Sqoop,爬蟲抓?。ㄍ獠繑?shù)據(jù))等采集樣本數(shù)據(jù)至HDFS中。以Flume為例,使用Flume日志收集系統(tǒng)監(jiān)控小程序頁面日志文件,一旦日志文件發(fā)生變化,F(xiàn)lume系統(tǒng)就會將變化的數(shù)據(jù)繼續(xù)寫進HDFS中進行存儲。source輸入源完成對日志數(shù)據(jù)的收集,分成Transition和Event送入到channel之中;channel設(shè)置管道主要提供隊列功能,對source中提供的數(shù)據(jù)進行簡單的緩存;sink輸出源取出channel中的數(shù)據(jù)寫入HDFS。
3.3? 離線數(shù)據(jù)分析層
本層主要工作是將數(shù)據(jù)采集模塊收集到的樣本數(shù)據(jù)提取出來,進行數(shù)據(jù)清洗和解析工作,并把處理后的結(jié)果存入關(guān)系型數(shù)據(jù)庫中。第一步,提取存儲在HDFS中的數(shù)據(jù),通過自定義的數(shù)據(jù)倉庫技術(shù)(Extract Transform Load,ETL)文件將數(shù)據(jù)按照定義好的數(shù)據(jù)倉庫模型進行格式化操作,并將清洗后的數(shù)據(jù)導(dǎo)出到Hadoop的Hbase中或者映射成Hive表。第二步,從Hbase/Hive中提取出上一步整理完的數(shù)據(jù),然后將數(shù)據(jù)經(jīng)過自定義編寫的MapReduce數(shù)據(jù)清洗或Hive數(shù)據(jù)分析進行數(shù)據(jù)解析計算,最后將分析后的數(shù)據(jù)Sqoop從HDFS遷移轉(zhuǎn)換到MySQL數(shù)據(jù)庫中。
3.4? 實時流數(shù)據(jù)分析模塊
本層主要工作是將通過數(shù)據(jù)采集模塊收集到的樣本數(shù)據(jù)提取出來,經(jīng)過實時分析處理獲得有價值的信息。第一步,采集樣本數(shù)據(jù)到Kafka(生產(chǎn)者—消費者設(shè)計模式)進行緩存。第二步,Spark Streaming接收Kafka發(fā)來的實時數(shù)據(jù),實時地進行分析計算,并反饋實時結(jié)果。經(jīng)過Spark Streaming處理后的數(shù)據(jù),可視情況進行存儲,以便之后再進行分析計算,如果場景時效性要求較高,處理之后的數(shù)據(jù)可以直接丟棄。
3.5? 數(shù)據(jù)展示模塊
本層主要工作是設(shè)計平臺展示頁面樣式并進行編寫,將經(jīng)過解析過程后的日志數(shù)據(jù)最終結(jié)果在平臺頁面上進行圖表展示。離線數(shù)據(jù)流可使用典型的Web框架把MySQL數(shù)據(jù)庫中的數(shù)據(jù)通過ECharts或HighCharts等可視化工具以曲線和分布圖的形式展現(xiàn)出來。與離線數(shù)據(jù)流不同的是,實時數(shù)據(jù)流無需用戶主動發(fā)出查詢,可以主動將實時結(jié)果推送給用戶。
4? ? 結(jié)語
經(jīng)實踐使用驗證,采用Hadoop和Spark的統(tǒng)一部署方案實現(xiàn)了計算資源按需伸縮,不同負載應(yīng)用混搭不僅提高了集群利用率,而且通過共享底層存儲避免數(shù)據(jù)跨集群遷移,在企業(yè)實際應(yīng)用中將是一種比較現(xiàn)實合理的選擇。當然,該大數(shù)據(jù)分析平臺也存在不足,例如Spark Streaming無法實現(xiàn)毫秒級的流計算等,有興趣的讀者可進一步完善,甚至可以結(jié)合OpenStack等云管理平臺進一步將其升級為私有云平臺。
[參考文獻[
[1]劉剛.小程序?qū)崙?zhàn)視頻課[M].北京:人民郵電出版社,2018.
[2]劉剛.微信小程序開發(fā)圖解案例教程[M].北京:人民郵電出版社,2019.
[3]溫春水.從零開始學(xué)Hadoop大數(shù)據(jù)分析[M].北京:機械工業(yè)出版社,2019.
[4]贠佩,晁玉蓉,樊華,等.基于Hadoop的數(shù)據(jù)分析系統(tǒng)設(shè)計[J].數(shù)字技術(shù)與應(yīng)用,2019(3):180-182.
[5]鄒立民.基于Hadoop的分布式數(shù)據(jù)存儲系統(tǒng)應(yīng)用的研究[D].沈陽:沈陽工業(yè)大學(xué),2018.
[6]劉暢.基于無服務(wù)器架構(gòu)的邊緣AI計算平臺[J].信息通信技術(shù),2018(10):45-49.
Construction and application of big data analysis platform for campus guide based on Hadoop
Wu Ting, Hu Bibo, Tan Zerong, Xiao Jian
(Guangzhou College of Technology and Business, Guangzhou 510850, China)
Abstract:Based on “Serverless” serverless architecture of the known cloud campus navigation Mini Programs, this paper proposes a unified Hadoop and Spark campus navigation big data analysis and design scheme, and explains the key technologies and steps to build the platform. Practice verifies that compared with the previous single Hadoop platform, the hybrid platform constructed in this paper has the advantages of scaling computing resources on demand, high utilization of clusters, avoiding data migration across clusters, and so on, which is more suitable for the actual use of enterprises.
Key words:Hadoop; Spark distributed computing; batch processing; flow calculation