黃 濤 高麗婷
(河北建筑工程學院,河北 張家口 075000)
大數(shù)據(jù)的時代背景下,數(shù)據(jù)越來越重要,如何把數(shù)據(jù)的最大價值挖掘出來是一個不可避免的問題.為挖掘數(shù)據(jù)的最大價值,對數(shù)據(jù)的分析被分為對歷史數(shù)據(jù)的分析和實時數(shù)據(jù)分析.實時數(shù)據(jù)處理應用的場景也越來越多,如文獻[1]分析了實時數(shù)據(jù)分析在工業(yè)方面的作用.Spark是實時數(shù)據(jù)分析中常用的一種平臺,它提供流式處理框架用于實時數(shù)據(jù)的處理.本文借助Spark搭建完整的大數(shù)據(jù)平臺來完成本次實驗分析.本方案以分析學習網(wǎng)站用戶喜好為目標,主要完成對網(wǎng)絡實時數(shù)據(jù)進行采集與實時分析的實現(xiàn).使用Flume對網(wǎng)站日志文件進行實時監(jiān)控與數(shù)據(jù)采集,并將數(shù)據(jù)下發(fā)給Kafka組件.再由Spark streaming對采集到的信息進行過濾與統(tǒng)計處理,將處理后的數(shù)據(jù)存入到Hbase中持久化數(shù)據(jù)加以利用.
該方法主要包括三個模塊,分別是Flume模塊、Kafka模塊、Spark streaming流處理模塊.Flume模塊處于系統(tǒng)頂層中,主要負責對文件的監(jiān)控與分發(fā).置于中間層的是Kafka模塊,主要負責接收上層的消息并提供一個給下一層使用的消息隊列.底層是Spark streaming流處理模塊,主要負責實時處理消息流數(shù)據(jù)與轉存處理好的數(shù)據(jù).通過三個模塊互相協(xié)調,各個組件之間的消息通信,完成了實時日志數(shù)據(jù)的產生到監(jiān)控,最后統(tǒng)計整理存入到數(shù)據(jù)庫中加以利用.
Flume是一個用于大數(shù)據(jù)平臺的文件采集,聚類和傳輸?shù)南到y(tǒng).可作用于分布式系統(tǒng)中.Flume工作是基于Agent的.Agent又包含了Source、Channel、Sink.這三個組件是Flume的核心組件,表1分別對其進行說明.
表1 Flume組件說明
Kafka,一種消息發(fā)布與訂閱系統(tǒng).可以將Kafka理解為一種消息隊列,且特別是用來處理大數(shù)據(jù)量的一種消息隊列.Kafka處理消息的核心組件有生產者(producer),消費者(consumer),主題(topic).Producer,消息的生產者,負責源源不斷的產生消息,本文的消息來源是上一級的Flume.Topic,消息處理主題,可以理解為一個隊列.Producer產生的消息要確定是發(fā)給哪一個主題來處理,同樣消費者在消費時也要根據(jù)主題來確定消費的是哪里的數(shù)據(jù).Consumer,消息消費者,從確定的主題隊列中得到消息并處理.
Kafka的生產者產生的消息可以被消費一次或多次,由此衍生了Kafka的兩種消費模式.第一種為一對一,即消息只會被消費一次,之后會被刪除.而另外一種為一對多,即消息被消費多次,首次消費該消息后,消息不會被刪除,繼續(xù)保留在消費隊列中,等待再次消費,且可以是不同的消費者來消費.
Spark streaming是一款可以使用復雜算子來處理流數(shù)據(jù)的實時數(shù)據(jù)處理工具,可以使用高級函數(shù)或者是機器學習算法來處理實時數(shù)據(jù).
Spark streaming工作原理,是使用微批次處理的思想將接收到的實時數(shù)據(jù)抽象為Dstream,即離散化數(shù)據(jù)流.其核心本質就是將數(shù)據(jù)流根據(jù)時間節(jié)點的不同來劃分為很多的批次,對每個批次進行處理,做出快速響應分析來達到實時處理的效果.使用streaming模塊具有下一優(yōu)勢,首先spark streaming具有動態(tài)負載均衡的特點,即根據(jù)每個節(jié)點的特性來動態(tài)的分配任務,這樣就可以合理利用每個節(jié)點的計算資源.其次spark streaming有很高的容錯性,streaming作業(yè)會被拆分為在任何地方都能運行,運行后合并的結果不會產生變化的小任務,它能夠并行處理,容錯性較高.然后由于spark還具有很好的可擴展性,每臺主機只要經(jīng)過相應的配置就可以加入到指定的spark集群中去,所以在streaming中可以根據(jù)作業(yè)所需的計算資源動態(tài)的調整集群中的主機數(shù)量,合理利用每個計算資源,減少不必要的資源浪費.
本文想要模擬出一個學習網(wǎng)站中課程點擊次數(shù)以及使用哪種搜索引擎的比例.要分析學習網(wǎng)站課程點擊與搜索引擎的使用,需要對其日志進行分析,需要提取日志中的關鍵信息包括IP地址、時間、請求方式、請求的課程、請求的協(xié)議、狀態(tài)碼及使用的搜索引擎.根據(jù)以上分析,時間可以使用本地時間,由于請求方式和協(xié)議對結果沒有影響,默認全部為”GET”和”HTTP1.1”.還需要五個數(shù)組來定義其他關鍵信息,然后隨機組合產生完整的日志信息.
創(chuàng)建以下五個數(shù)組用來模擬實時數(shù)據(jù),各數(shù)組的功能與描述如表2所示.
表2 數(shù)組功能與描述
創(chuàng)立目標數(shù)組后,對所有日志關鍵信息進行拼接形成完整的日志信息.一條完整的日志信息格式為:{64.156.29.632022-04-24 13:52:35"GET /class/500.html HTTP/1.1"200http://www.baidu.com/s?wd=Linux進階}.本條日志信息表示ip為64.156.29.63的主機在2022年4月24日的13點52分點擊了課程編號為500的課程,使用的HTTP請求和GET方式訪問,響應的狀態(tài)碼為200,并且使用了百度搜索引擎搜索了關鍵字為Linux進階的網(wǎng)頁信息.
實時效果模擬.為達到實時數(shù)據(jù)模擬的效果.在Linux的終端環(huán)境下,使用命令crontab來定期執(zhí)行任務的.設置定期執(zhí)行的間隔,每隔指定時間產生運行一次腳本來產生數(shù)據(jù)達到實時數(shù)據(jù)模擬的效果.可以根據(jù)實際需求來設置定時執(zhí)行的間隔和每次執(zhí)行使產生多少實時日志數(shù)據(jù),部分實時數(shù)據(jù)如圖1所示.
圖1 部分實時日志數(shù)據(jù)
由于Spark是基于Hadoop的運行的,所以實驗環(huán)境必須搭建Hadoop作為基礎,而Kafka也依賴與Zookeeper運行,要搭建Zookeeper保證Kafka的運行.在搭建好所有組件后,確保每個組件的配置文件的修改都生效并可以成功運行,想要集群正常運行還需配置hosts主機名與主機地址的映射,配置SSH免密登錄.本實驗所依賴的運行平臺環(huán)境整體如表3所示.
表3 實驗整體環(huán)境
啟動整個實驗環(huán)境,確保環(huán)境中的每個組件都正常運行,且在統(tǒng)一分布式的環(huán)境下.啟動一個flume事件來監(jiān)控日志文件,當日志文件被寫入日志時就會被監(jiān)控.之后創(chuàng)建一個Kafka的topic來接收所監(jiān)控的日志文件.之后啟動Spark streaming實時處理Kafka所得到的日志,對其篩選,統(tǒng)計等操作之后存入Hbase數(shù)據(jù)庫令其持久化,以便后續(xù)分析與操作.在Linux的終端中周期性的運行日志產生的腳本,flume會實時監(jiān)控日志是否被產生新的日志,日志文件發(fā)生變化,flume就會給Kafka新的數(shù)據(jù)流處理,就可以達到預期的實時處理的效果,成功對實時產生的日志進行了實時處理并存儲到了Hbase中.實時數(shù)據(jù)分析效果如圖2、圖3所示.
圖2 搜索引擎統(tǒng)計表
圖3 課程統(tǒng)計表
在圖2中,左邊是搜索引擎的列表,由時間和搜索引擎的名字組成,右邊是時間戳和具體值,某一行的內容表示某搜索引擎的使用次數(shù).通過分析對應搜索引擎標簽的具體點擊次數(shù)就可以得知哪種搜索引擎是使用最多次數(shù)的,哪種是最不喜歡的,對應著使用次數(shù)最少.達到分析搜索引擎喜好的目標.
在圖3中,左邊的一列是時間加上課程的編號,右邊同樣是具體時間戳和次數(shù)的值,某一行的內容表示該課程共被點擊了多少次.根據(jù)課程編號還原對應的課程,在結合具體的使用數(shù)值,可以清楚的分析出哪種課程學習人數(shù)最多,最受喜愛,哪種課程學習人數(shù)最少,不受歡迎.達到分析出課程的受歡迎程度.
本文從環(huán)境搭建,到分析實時日志,做了完整的實驗.編寫了腳本實時產生日志數(shù)據(jù)文件,使用了Flume對文件進行實時監(jiān)控,交由Kafka進行消息整合與分發(fā),最后交付給spark streaming處理,發(fā)現(xiàn)Spark在實時數(shù)據(jù)處理中具有很高的運算能力,它的streaming流處理框架特別適用于實時數(shù)據(jù)的處理.如今的環(huán)境下,數(shù)據(jù)量越來越高,正是需要高處理能力的大數(shù)據(jù)處理平臺.數(shù)據(jù)的實時分析也越來越重要,在實時分析中還可以處理異常數(shù)據(jù),并將處理的數(shù)據(jù)轉存到其他的數(shù)據(jù)庫中持久化使用.