黃素萍 常加強 高 妍
(咸陽師范學(xué)院 計算機學(xué)院,陜西 咸陽712000)
近十年來,互聯(lián)網(wǎng)迅速發(fā)展,資訊來源也從過去的報刊雜志、電視、電臺,變成當(dāng)下的網(wǎng)絡(luò)新聞門戶、博客網(wǎng)站、微博、推特等各種各樣的網(wǎng)絡(luò)輿情平臺。獲得資訊的方式也從過去的定時播報、定時收聽收看變成了現(xiàn)在的即時訂閱,隨時隨地訪問。網(wǎng)絡(luò)已成為人們獲取各類信息的重要渠道。然而,網(wǎng)絡(luò)中每天如潮水般的大量信息,使人們很難快速獲取到自己想要的信息,因此,如何從海量的數(shù)據(jù)中快速篩選、過濾出用戶需要的重要信息的分布狀況,幫助用戶快速獲取有用信息,已成為當(dāng)今研究的熱點之一。本文以新聞信息為例,介紹了海量新聞信息的分析處理過程,以可視化的結(jié)果,向用戶展示了熱點新聞的分布狀況,幫助人們快速了解掌握熱點新聞信息。
在進(jìn)行海量新聞信息的數(shù)據(jù)采集、數(shù)據(jù)消費、處理和數(shù)據(jù)分析過程中涉及到如下核心技術(shù):
Hadoop 是一個分布式處理框架,是大數(shù)據(jù)技術(shù)中最核心的組件,像Hbase,Spark,ZooKeeper 都是基于Hadoop 搭建的[1]。它里面有兩個核心的組件Hdfs 和Mapreduce, 其中Hdfs 用來存儲海量數(shù)據(jù),Mapreduce 用來進(jìn)行數(shù)據(jù)計算。
隨著Apache Hadoop 系統(tǒng)開源化的發(fā)展,Hadoop 平臺從最初只包含HDFS、MapReduce、HBase 等基本子系統(tǒng),到現(xiàn)在已演變成包含很多相關(guān)子系統(tǒng)的完整的大數(shù)據(jù)處理生態(tài)系統(tǒng)[2]。
ZooKeeper 是集群的管理者,它監(jiān)督著Hadoop 各個組件集群的節(jié)點,當(dāng)某一個集群的節(jié)點掛掉時,ZooKeeper 中flower 就會檢測到接收請求并向observer 傳遞消息,observer 接收到請求后會將請求轉(zhuǎn)發(fā)給leader,隨后leader 就會及時更新狀態(tài),所以ZooKeeper 主要是用來協(xié)調(diào)Hadoop 各個組件集群的工作,當(dāng)集群中一個節(jié)點出現(xiàn)故障,ZooKeeper 會自動檢測正常節(jié)點,并安排它進(jìn)行工作,保證集群的正常運行。ZooKeeper 只適合存儲一些少量信息如配置文件、發(fā)布信息、訂閱信息等,而不適合存儲大規(guī)模的信息。Hadoop、Storm、消息中間件、RPC 服務(wù)框架、分布式數(shù)據(jù)庫同步系統(tǒng),這些都是Zookeeper 的應(yīng)用場景。
Flume 是一個可以從不同的數(shù)據(jù)源有效的進(jìn)行數(shù)據(jù)采集,并將數(shù)據(jù)傳輸?shù)綌?shù)據(jù)中心的分布式、可靠、和高可用系統(tǒng),它可以接受任何數(shù)據(jù)源,在日志系統(tǒng)中進(jìn)行設(shè)置,用于收集、聚合從許多來源傳來的大量流數(shù)據(jù)事件,并將它們轉(zhuǎn)移到一個中央數(shù)據(jù)存儲中,它提供對數(shù)據(jù)進(jìn)行簡單處理,并寫到各種數(shù)據(jù)接收方。
Spark 是一個開源的基于內(nèi)存計算的集群計算系統(tǒng),包含了Spark Core、Spark SQL、Spark Streaming、Spark MLlib、Spark GraphX 等大數(shù)據(jù)領(lǐng)域常見的各種計算框架[3]。其中Spark Core是離線計算,主要對已加載的數(shù)據(jù)進(jìn)行計算處理;Spark Streaming 是實時流式計算,主要對傳輸中數(shù)據(jù)進(jìn)行計算;Spark SQL 是交互式查詢,通過SQL 語句查詢數(shù)據(jù);Spark MLlib 用于機器學(xué)習(xí);Spark GraphX 用于進(jìn)行圖計算[4]。這些組件可以使它完成一站式的大數(shù)據(jù)任務(wù)。同時,Spark 提供了更多的數(shù)據(jù)集操作的方法,幫助開發(fā)人員處理更復(fù)雜的任務(wù)。
目前,數(shù)據(jù)采集主要使用爬蟲采集器和網(wǎng)絡(luò)爬蟲,兩種網(wǎng)絡(luò)爬蟲技術(shù)。網(wǎng)絡(luò)爬蟲獲取數(shù)據(jù)的過程較繁瑣,需要用戶編寫代碼,效率較低,容易出現(xiàn)問題。采用爬蟲采集器無需用戶編寫代碼,操作方便,效率較高。本次采用八爪魚采集器獲取網(wǎng)絡(luò)新聞數(shù)據(jù)。
八爪魚采集器獲取數(shù)據(jù)的流程:先采集器選擇采集數(shù)據(jù)方式,設(shè)置要采集數(shù)據(jù)的網(wǎng)址,如https://news.sina.com.cn/china/并保存,選擇相應(yīng)的流程滾動設(shè)置,設(shè)置要爬取的數(shù)據(jù)項(如,新聞標(biāo)題),保存設(shè)置后可開始采集數(shù)據(jù)。數(shù)據(jù)采集完成,選擇導(dǎo)出數(shù)據(jù)格式,如Excel 格式文檔。
前期從各大新聞網(wǎng)站爬取的大量新聞數(shù)據(jù)格式雜亂無章,沒有統(tǒng)一格式,沒有規(guī)律,各類符號都混雜在一起,如果直接使用這些原始新聞數(shù)據(jù)進(jìn)行處理,既浪費精力,工作效率又低。所以要對采集的新聞數(shù)據(jù)進(jìn)行預(yù)處理,即是對新聞數(shù)據(jù)進(jìn)行統(tǒng)一格式化處理,此處是將原始新聞數(shù)據(jù)格式統(tǒng)一轉(zhuǎn)換成以逗號分隔的連續(xù)字符串。具體的做法是將數(shù)據(jù)集文檔格式轉(zhuǎn)換為log類型文檔,再使用命令cat,將數(shù)據(jù)集文檔中的制表符,空格符等更換為逗號。
接下來需要在Hadoop 數(shù)據(jù)處理集成平臺中進(jìn)行數(shù)據(jù)的處理。這個過程需要進(jìn)行Flume 和Kafka 系統(tǒng)的安裝和部署。
3.3.1 數(shù)據(jù)清洗
數(shù)據(jù)清洗主要是把有用的數(shù)據(jù)留下,無用的數(shù)據(jù)刪掉。它是整個數(shù)據(jù)處理分析過程中最核心的一個環(huán)節(jié)。這里使用了SparkStreaming 并行計算框架,通過其Transformation 轉(zhuǎn)換算子進(jìn)行數(shù)據(jù)的轉(zhuǎn)換和處理,對實時傳輸過來的新聞數(shù)據(jù)進(jìn)行清洗,從中獲取新聞標(biāo)題、分類名、新聞網(wǎng)站等信息,分別統(tǒng)計出標(biāo)題出現(xiàn)的次數(shù),標(biāo)題分類名和新聞網(wǎng)站出現(xiàn)的次數(shù)。
數(shù)據(jù)清洗的過程為:先獲取Kafka 從Flume 中消費的數(shù)據(jù),同時創(chuàng)建DStream。DStream 是以鍵值對的形式存在,對DStream進(jìn)行Map 操作獲取到它的value 值,即所有實時傳輸進(jìn)來的數(shù)據(jù),返回一個新的DStream。再對DStream 進(jìn)行Map 操作返回多行數(shù)據(jù),隨后用函數(shù)獲取到新聞標(biāo)題、分類名、新聞網(wǎng)站等關(guān)鍵數(shù)據(jù),最后進(jìn)行聚合操作,獲取各個項目名對應(yīng)的出現(xiàn)次數(shù)。
3.3.2 數(shù)據(jù)存儲
清洗后的數(shù)據(jù)需要進(jìn)行存儲,這里采用MySQL 數(shù)據(jù)庫完成。
數(shù)據(jù)存儲的具體實現(xiàn):先將獲取到的Dstream 轉(zhuǎn)換成Spark中的RDD,再對RDD 進(jìn)行分區(qū),然后遍歷每個分區(qū)中出現(xiàn)的信息。并和MySQL 數(shù)據(jù)庫進(jìn)行連接,調(diào)用存儲過程將對應(yīng)數(shù)據(jù)插入到相應(yīng)表的字段中,完成數(shù)據(jù)存儲。
進(jìn)行數(shù)據(jù)存儲的表有三張:標(biāo)題表(Title),分類表(Classify)和新聞網(wǎng)站表(Url)。標(biāo)題表主要存儲新聞的標(biāo)題名和出現(xiàn)的次數(shù)。分類表存儲新聞分類名和出現(xiàn)的次數(shù)。新聞網(wǎng)站表存儲新聞網(wǎng)站名和出現(xiàn)的次數(shù)。
3.4 數(shù)據(jù)分析和結(jié)果展示
3.4.1 程序框架及插件簡介
本次研究開發(fā)的程序使用Spring Boot 和Echarts 框架。Spring Boot 框架可以非常容易和快速的創(chuàng)建應(yīng)用程序,從而使開發(fā)人員不再需要定義樣板化的配置。Echarts 是一款非常優(yōu)秀的可視化前端框架,支持如IE,Chrome,F(xiàn)irefox 在內(nèi)的多種瀏覽器。它提供了豐富的API 接口以及文檔,通過合理設(shè)置并結(jié)合后臺傳送的JSON 數(shù)據(jù),即可展示所需的數(shù)據(jù)主題。
3.4.2 程序功能設(shè)計和實現(xiàn)
通過研究,新聞標(biāo)題出現(xiàn)的頻度可以反映新聞話題的熱度,程序基于已處理的新聞數(shù)據(jù),按新聞出現(xiàn)的次數(shù),結(jié)合echarts圖表庫,展示出排名前5 的新聞話題。同時,基于排名的新聞話題,分別對其所屬的新聞類型和來源的新聞網(wǎng)站的次數(shù)進(jìn)行統(tǒng)計,獲得熱點新聞所屬的新聞類型和來源網(wǎng)站統(tǒng)計結(jié)果,展示出排名前10 的新聞領(lǐng)域和排名前6 的新聞網(wǎng)站。
圖1 熱點新聞話題排名
圖2 新聞分類展示結(jié)果
圖3 新聞網(wǎng)站展示結(jié)果
本次研究是基于數(shù)據(jù)采集、數(shù)據(jù)處理和數(shù)據(jù)分析等技術(shù),通過采集器采集新聞數(shù)據(jù),用Kafka 和Flume 集成環(huán)境對海量的新聞數(shù)據(jù)進(jìn)行傳輸,使用SparkStreaming 并行計算框架進(jìn)行數(shù)據(jù)處理,將數(shù)據(jù)存儲在MySQL 數(shù)據(jù)庫,最后結(jié)合Echarts 可視化插件,將熱點新聞數(shù)據(jù)狀況以動態(tài),以更直觀的方式展示熱點新聞的分布信息。由于各方面的局限性,本次工作只是在現(xiàn)有技術(shù)的基礎(chǔ)上,做了一些具體的實現(xiàn)。今后在海量信息的處理方面,還需進(jìn)一步的深入研究。