王一高 任耀星 李嘉瑤
(山西農(nóng)業(yè)大學(xué) 山西省晉中市 030801)
隨著智能推薦系統(tǒng)的不斷發(fā)展和完善,智能推薦算法在各種軟件中得到了應(yīng)用。智能推薦算法在讓人們毫不費(fèi)力地瀏覽到自己關(guān)心的事物同時(shí)給軟件運(yùn)營商帶來收益,但是長此以往,人們的視野逐漸變窄,眼里的世界不再那么豐富多彩,不能全方位了解和分析客觀事物。因此本文設(shè)計(jì)了一種全新的新聞可視化平臺,該平臺的目的就在于幫助人們擺脫智能推薦算法,可以快速地按熱詞來瀏覽相關(guān)新聞,用最短的時(shí)間獲取到最多的信息。
本文所設(shè)計(jì)的大數(shù)據(jù)新聞可視化平臺的系統(tǒng)架構(gòu)圖見圖1。一般情況下,大數(shù)據(jù)的處理由數(shù)據(jù)采集、數(shù)據(jù)預(yù)處理、數(shù)據(jù)存儲、數(shù)據(jù)分析與挖掘、數(shù)據(jù)可視化這五部分構(gòu)成。本文所設(shè)計(jì)的大數(shù)據(jù)新聞可視化平臺依賴于Hadoop 集群實(shí)現(xiàn):數(shù)據(jù)采集部分使用分布式多進(jìn)程網(wǎng)絡(luò)爬蟲采集互聯(lián)網(wǎng)主流新聞媒體的熱榜數(shù)據(jù);之后在爬蟲內(nèi)部進(jìn)行數(shù)據(jù)預(yù)處理,篩選或刪除掉一些不規(guī)則的數(shù)據(jù);數(shù)據(jù)存儲部分使用HDFS 存儲離線數(shù)據(jù),使用MySQL 存儲實(shí)時(shí)處理結(jié)果;數(shù)據(jù)分析部分分為實(shí)時(shí)數(shù)據(jù)分析和離線數(shù)據(jù)分析,通過SparkStreaming 進(jìn)行實(shí)時(shí)流數(shù)據(jù)處理,通過MySQL 或HiveSQL 進(jìn)行離線數(shù)據(jù)分析,其中MySQL 的數(shù)據(jù)分析結(jié)果用于數(shù)據(jù)可視化,HiveSQL 則用于海量離線數(shù)據(jù)分析。
由于單個(gè)NamNode 節(jié)點(diǎn)存在單點(diǎn)故障且面對海量數(shù)據(jù)存在壓力過大的問題,一旦該節(jié)點(diǎn)發(fā)生宕機(jī),整個(gè)集群都會不可用[1]。為了解決上述問題,Hadoop 在2.0 版本中引入了高可用機(jī)制,旨在消除單點(diǎn)故障,提供7*24 小時(shí)不間斷服務(wù)。以典型的高可用集群為例,會有兩個(gè)NameNode 節(jié)點(diǎn)提供服務(wù),一個(gè)NameNode 處于Active 狀態(tài)、另一個(gè)NameNode 處于StandBy 狀態(tài),當(dāng)Active 狀態(tài)的NameNode 發(fā)生宕機(jī)時(shí),StandBy 狀態(tài)的NameNode 會自動轉(zhuǎn)為Actie 狀態(tài)接續(xù)工作。
本文所搭建的高可用集群由3 臺CPU 為2 核、內(nèi)存為4GB、操作系統(tǒng)為CentOS 7.4 64 位的云服務(wù)器組成。主機(jī)名分別為:Cluster01,Cluster02,Cluster03。使用Xftp 將相關(guān)組件的安裝包上傳到服務(wù)器解壓后進(jìn)行安裝配置。

圖1:系統(tǒng)架構(gòu)圖

圖2:詞頻統(tǒng)計(jì)圖

圖3:熱度趨勢圖
Flume 通常以分布式的形式部署于Hadoop 集群中,它具有高可用和高可靠的特性。Flume 的核心角色是Agent,每個(gè)Agent 的內(nèi)部有三個(gè)組件:Source、Sink、Channel。Flume 可以根據(jù)用戶的需求進(jìn)行靈活的定制,可以是單個(gè)Agent 采集數(shù)據(jù),也可以是多個(gè)Agent 之間進(jìn)行串并聯(lián),共同采集數(shù)據(jù)。在本文所搭建的分布式Flume日志采集系統(tǒng)中,Cluster02 和Cluster03 的Source 是分布式多進(jìn)程爬蟲產(chǎn)生的新聞數(shù)據(jù),Sink 均對接Cluster01 所部署Flume的Source。Cluster01 的Sink 為Hbase 數(shù)據(jù)庫和Kafka 消息隊(duì)列。爬蟲每半小時(shí)運(yùn)行一次,當(dāng)Flume 監(jiān)測到日志文件發(fā)生變化時(shí)會自動對日志文件的新增內(nèi)容進(jìn)行采集和匯總,然后分別傳輸?shù)終afa消息隊(duì)列和Hbase 數(shù)據(jù)庫中。
經(jīng)實(shí)測爬蟲每次運(yùn)行會產(chǎn)生4-5 萬條數(shù)據(jù),普通的單線程爬蟲在爬取海量新聞數(shù)據(jù)時(shí)顯得力不從心,無法保證在短時(shí)間內(nèi)完成數(shù)據(jù)的更新。且爬蟲屬于IO 密集型任務(wù),在短時(shí)間內(nèi)會進(jìn)行大量的讀寫操作[2]。為了加快爬取速度并實(shí)現(xiàn)數(shù)據(jù)的及時(shí)更新,需根據(jù)爬取任務(wù)量對服務(wù)器進(jìn)行負(fù)載均衡。依托于Hadoop 集群,分布式多進(jìn)程爬蟲得以實(shí)現(xiàn)[3]。其中Cluster02 和Cluster03 負(fù)責(zé)爬取數(shù)據(jù)并將每次爬取的數(shù)據(jù)寫入緩存文件,與此同時(shí),Cluster02 和Cluster03 上部署的分布式Flume 負(fù)責(zé)監(jiān)督并將爬蟲產(chǎn)生的數(shù)據(jù)傳輸給Cluster01 進(jìn)行匯總。新聞數(shù)據(jù)具有很強(qiáng)的時(shí)效性,部分新聞媒體的更新頻率很高,所以分布式爬蟲設(shè)定每半小時(shí)運(yùn)行一次。
Kafka 是一種基于發(fā)布-訂閱的分布式消息系統(tǒng),其具有高吞吐量、低延遲的特性,廣泛應(yīng)用于消息傳遞、日志收集領(lǐng)域。Kafka 可以將消息持久化存儲在硬盤上,從而規(guī)避了數(shù)據(jù)丟失的風(fēng)險(xiǎn),并且消費(fèi)者可以憑借偏移量在一段時(shí)間后實(shí)現(xiàn)繼續(xù)消費(fèi)。在本文搭建的Hadoop 集群中,Cluster01 節(jié)點(diǎn)的Flume 相當(dāng)于Kafka 的生產(chǎn)者,SparkStreaming 端作為Kafka 消費(fèi)者接收海量新聞數(shù)據(jù)進(jìn)行實(shí)時(shí)處理。
Spark 是一個(gè)面向大數(shù)據(jù)處理而設(shè)計(jì)的計(jì)算引擎,與Hadoop的MapReduce 相比,其內(nèi)存計(jì)算的特性使得其中間結(jié)果不必反復(fù)寫入磁盤,避免產(chǎn)生大量的IO 開銷,因此可以在短時(shí)間內(nèi)完成對海量數(shù)據(jù)的處理。SparkStreaming是構(gòu)建于SparkCore之上的一套框架,具有高吞吐量、容錯(cuò)的特性,主要用來處理實(shí)時(shí)流式數(shù)據(jù),其將接收到的實(shí)時(shí)輸入數(shù)據(jù)流按照時(shí)間間隔進(jìn)行切分后計(jì)算處理。其數(shù)據(jù)源可以是Kafka、Flume、HDFS 等,處理結(jié)果支持寫入HDFS 或其它數(shù)據(jù)庫。
在本文所設(shè)計(jì)的新聞可視化平臺中,SparkStreaming 程序作為Kafka 的消費(fèi)者,在取到數(shù)據(jù)之后使用Jieba 中文分詞對新聞文本切分并進(jìn)行詞頻統(tǒng)計(jì),為便于數(shù)據(jù)可視化,將處理結(jié)果寫入MySQL數(shù)據(jù)庫中,為了避免數(shù)據(jù)冗余,MySQL 數(shù)據(jù)庫在每次數(shù)據(jù)更新前都會執(zhí)行清空指令。
HBase 是一個(gè)分布式的、面向列的開源數(shù)據(jù)庫,是BigTable的開源實(shí)現(xiàn),其構(gòu)建于HDFS 之上,具有高性能、面向列、可伸縮的特性,廣泛應(yīng)用于社交信息、搜索引擎、網(wǎng)絡(luò)日志等的存儲。HBase 支持通過JavaAPI、HBase Shell、Hive 等進(jìn)行訪問。將Flume 的Sink 設(shè)置為HBase 并創(chuàng)建相應(yīng)表便可以實(shí)現(xiàn)HBase 與Flume 的對接。本文所編寫的分布式爬蟲每半小時(shí)運(yùn)行一次,若每次爬取的數(shù)據(jù)都寫入HBase 數(shù)據(jù)庫,則會造成數(shù)據(jù)冗余,浪費(fèi)存儲容量,因此離線數(shù)據(jù)每日只寫入一次。爬蟲采集的新聞按類別可以分為:時(shí)政、經(jīng)濟(jì)、法律、軍事、科技、文教、體育、社會等,數(shù)據(jù)的不斷積累可以構(gòu)建出專屬的新聞?wù)Z料庫,這可為日后的機(jī)器學(xué)習(xí)、文本分類、NLP 研究提供數(shù)據(jù)支撐。

圖4:國內(nèi)新聞地圖

圖5:國際新聞地圖

圖6:新聞來源及內(nèi)容
Hive 是一個(gè)采用MapReduce 作為計(jì)算引擎,HDFS 作為文件系統(tǒng)的數(shù)據(jù)倉庫工具,Hive 的編程語言為HiveSQL,是一種類SQL 語言,其特點(diǎn)是可以將SQL 查詢轉(zhuǎn)換為MapReduce 任務(wù)進(jìn)行處理,具有簡單易上手的特點(diǎn)。可以通過在Hive 中創(chuàng)建HBase 的外部表來訪問HBase 中的離線新聞數(shù)據(jù)并進(jìn)行大規(guī)模數(shù)據(jù)分析。
本文采用了百度Sugar 的解決方案,首先將處理后的數(shù)據(jù)寫入到數(shù)據(jù)庫中并開放數(shù)據(jù)庫相應(yīng)端口,將集群數(shù)據(jù)庫添加到Sugar 中作為數(shù)據(jù)源,然后在Sugar 中設(shè)計(jì)好可視化版式并編寫相應(yīng)SQL 語句便可以實(shí)現(xiàn)數(shù)據(jù)可視化。且Sugar 支持圖表下鉆功能,提供了優(yōu)美的界面和強(qiáng)大的交互體驗(yàn),可以讓開發(fā)者將工作重心更多地放在數(shù)據(jù)分析與處理而不是前端頁面開發(fā)。
2.8.1 熱詞詞頻統(tǒng)計(jì)
查詢數(shù)據(jù)庫中詞頻統(tǒng)計(jì)結(jié)果的前30 條數(shù)據(jù),以橫向柱圖的形式進(jìn)行展示,見圖2。點(diǎn)擊單個(gè)柱子會自動彈框展示包含熱詞的相關(guān)新聞。
2.8.2 熱度演變趨勢
根據(jù)積累的歷史數(shù)據(jù),可以進(jìn)一步展開數(shù)據(jù)分析,以橫向柱圖中的熱詞作為關(guān)鍵字在數(shù)據(jù)庫中進(jìn)行模糊匹配并按日期分組求和,可以得出該熱詞的變化趨勢[4]。以最近的“日本決定向大海排核污染水”新聞為例,查看“日本”的熱度演變趨勢,由圖可以看出在2021-4-12 之后,“日本”的相關(guān)熱度驟然增高,見圖3。
2.8.3 新聞地圖
在使用Jieba 分詞器完成中文分詞后,分詞中包含著若干地名信息,將地名信息提取統(tǒng)計(jì)之后顯示在地圖上可以構(gòu)建一幅新聞地圖[5]。本文的新聞地圖由國內(nèi)新聞地圖(圖4)和國際新聞地圖(圖5)組成。國內(nèi)新聞地圖以氣泡圖的大小反映該地區(qū)新聞數(shù)量,國際新聞地圖則以色塊的形式反映國家的新聞數(shù)量。點(diǎn)擊區(qū)域或國家,均可彈框展示包含該區(qū)域或國家的新聞,通過傳遞參數(shù),點(diǎn)擊熱點(diǎn)名會自動使用百度對該內(nèi)容進(jìn)行搜索,見圖6。
本平臺是一種使用大數(shù)據(jù)相關(guān)技術(shù)開發(fā)的大數(shù)據(jù)新聞統(tǒng)計(jì)分析平臺,在完成新聞數(shù)據(jù)可視化的同時(shí)構(gòu)建新聞?wù)Z料庫。通過爬取全網(wǎng)各大新聞媒體平臺的實(shí)時(shí)數(shù)據(jù),并對其熱榜信息進(jìn)行聚合,實(shí)現(xiàn)對新聞網(wǎng)站的各種信息(來源,分類,熱度信息等)的分析。通過統(tǒng)計(jì)分析的數(shù)據(jù),將實(shí)時(shí)新聞熱點(diǎn)進(jìn)行可視化展示。首先本平臺有助于用戶告別智能推薦,減少不必要信息的干擾,從而更全面的按照自己的需求查看新聞。通過聚合全網(wǎng)信息,客戶可以用較短的時(shí)間去快速瀏覽、獲取更多的信息,這種方案簡單高效,是一種全新的新聞獲取思路。并且本文所構(gòu)建的新聞?wù)Z料庫可為后續(xù)實(shí)驗(yàn)和科學(xué)研究提供數(shù)據(jù)支撐。