常 艷,曹 明,姚開元
(山西農(nóng)業(yè)大學 軟件學院,山西 太谷 030801)
如何高效利用信息自古以來便是一個非常重要的話題。傳統(tǒng)的古老法、跨平臺法、類蘋果法等在信息加工效率、使用便捷性、安全性等多個方面存在不同程度的局限性。而在大數(shù)據(jù)時代背景下,結(jié)合大數(shù)據(jù)技術的軟件法不僅能夠?qū)€人數(shù)據(jù)實現(xiàn)有效管理,滿足用戶個性化需要,還能一定程度上保持相關企業(yè)的競爭優(yōu)勢[1]。本文借助大數(shù)據(jù)技術構(gòu)建個人知識庫,達成個性化主題分析,有效提高信息輸出的效率。
與面向特定領域的通用知識庫相比,個人知識庫側(cè)重面向用戶興趣,保障知識庫中所存儲的信息與個人息息相關,能夠快速滿足用戶的個性化需求[2-3]。本文個人知識庫的構(gòu)建重點關注知識數(shù)據(jù)的實時性與連續(xù)性,以便為用戶提供持續(xù)跟進的知識參考價值。整體劃分為采集、處理、存儲、監(jiān)控四個模塊進行設計實現(xiàn)[4]。具體架構(gòu)設計如圖1所示。
圖1 個人知識庫架構(gòu)設計圖
個人知識庫的數(shù)據(jù)來源為Web網(wǎng)頁,依托Python爬蟲程序,自定義URL入口與爬蟲頻率,定時觸發(fā)模擬人為瀏覽模式實現(xiàn)初始非結(jié)構(gòu)化數(shù)據(jù)采集,按照個人主題需求對數(shù)據(jù)進行解析,篩選出主題相關內(nèi)容并按照一定格式規(guī)則存入指定的服務器本地磁盤文件夾內(nèi),完成數(shù)據(jù)采集。
Flume作為一種分布式管道架構(gòu),在數(shù)據(jù)源與目的地之間通過Agent網(wǎng)絡實現(xiàn)數(shù)據(jù)路由[5]。個人知識庫利用Flume監(jiān)聽指定文件夾,借助Flume多級架構(gòu)特性完成Event基本傳輸單元復用分流至Kafka及HDFS,利用Kafka Cache隊列補償兩個數(shù)據(jù)之間的速率差異,以解決由于發(fā)送和接收數(shù)據(jù)之間的速率不一致而造成的數(shù)據(jù)丟包問題,最后借助Spark與Hive達成實時處理與離線處理兩條數(shù)據(jù)處理流水線,同步滿足用戶的實時分析需求與離線統(tǒng)計目標。
數(shù)據(jù)實時處理場景中,當Flume監(jiān)控的文件發(fā)生變化時,將變化的數(shù)據(jù)交由Kafka暫存,Spark輪詢Kafka獲取數(shù)據(jù)進行計算并將處理結(jié)果傳遞至MangoDB及MySQL進行持久化。同時Flume通過文件配置可同步將數(shù)據(jù)傳輸至HDFS,利用多層Hive處理獲取用于可視化分析的維度表,并通過Sqoop工具將數(shù)據(jù)表遷移至MySQL。
個人知識庫可采用Azkaban、Zabbix進行全流程調(diào)度和集群監(jiān)控,保障系統(tǒng)能夠安全穩(wěn)定地執(zhí)行,并對可能出現(xiàn)的一系列故障提供預警方案,輸出基于郵件的告警,及時反饋服務器相關問題。
個人知識庫搭建完成后,依賴ParseServer工具提供的API服務,可實現(xiàn)實時信息的查詢,完成信息檢索,同時也可在FineBI上對數(shù)據(jù)進行分析,獲取隱藏在數(shù)據(jù)冰山下的知識,為后續(xù)的決策提供一定的輔助參考,具體如圖2所示。
圖2 房價分析系統(tǒng)架構(gòu)設計圖
ParseServer能夠協(xié)助快速搭建后端,使得用戶可以通過App、網(wǎng)站、小程序等各類終端,調(diào)用ParseServer提供的API服務,便捷實現(xiàn)用戶的精細化查詢需求,拓寬用戶的數(shù)據(jù)查詢途徑。MangoDB作為經(jīng)典的NoSQL數(shù)據(jù)庫,能夠與ParseServer無縫配合進行信息的實時檢索。
FineBI可以利用花生殼進行內(nèi)網(wǎng)穿透實現(xiàn)外網(wǎng)訪問,與MySQL建連,讓用戶能夠?qū)A繑?shù)據(jù)迅速進行多維度可視化分析。
在CentOS平臺首先完成NodeJS及MangoDB的環(huán)境搭建,然后進行ParseServer安裝,該服務器搭建完成后,即可配置Hadoop集群。集群中所有物理主機安裝CentOS7 64位,為了操作方便,修改每臺主機的名稱和端口號并配置免密登錄,同時指定節(jié)點信息,具體配置如表1所示。
表1 Hadoop集群配置表
Hadoop環(huán)境搭建完成即可進行Hive數(shù)倉的安裝,分別配置hive-env.sh、hive-config.sh、hive-site.xml文件來設置連接MySQL的相關參數(shù)與其他參數(shù)。
完成基礎配置后再進行Flume、Kafka、Spark 、Sqoop、Azkaban和Zabbix等的搭建。Zabbix可以對集群中三個節(jié)點的啟動狀態(tài)進行有效監(jiān)控,能夠?qū)崿F(xiàn)本地資源及數(shù)據(jù)收集的監(jiān)測,進行告警,同時用戶可以通過zabbix-web頁面實時觀察相應的監(jiān)控信息。
整體環(huán)境搭建完成后順利進入數(shù)據(jù)處理。經(jīng)統(tǒng)計臟數(shù)據(jù)等數(shù)據(jù)量低于1%,這些記錄的主要特征是缺少數(shù)據(jù)值。本系統(tǒng)在設計實現(xiàn)的過程中,數(shù)據(jù)倉庫劃分為三層,極大地減少重復計算、方便定位和理解,根據(jù)每層的功能,采取不同的數(shù)據(jù)處理方式,主題維度和各層級中表的命名,字段命名也有不同,表中數(shù)據(jù)元素的數(shù)據(jù)類型根據(jù)字段名和操作過程確定。
ODS層是數(shù)倉的第一層,直接將HDFS中的原始數(shù)據(jù)進行存儲,完成數(shù)據(jù)備份。數(shù)據(jù)采用LZO壓縮,上傳到HDFS并檢查Hive中的數(shù)據(jù)映射包括建表,創(chuàng)建時間分區(qū)等。DWD層是數(shù)倉的第二層,主要是對ODS層中的數(shù)據(jù)進行清洗和降維。以分析房價系統(tǒng)為例,去除空值、臟數(shù)據(jù),用正則表達式對房價等有單位的數(shù)據(jù)做一致化處理,將數(shù)據(jù)值進行拆分,并根據(jù)實際情況,“總房價”“每平米房價”“每月租金”相關數(shù)據(jù)不保留小數(shù)位,“租房面積”“每平米租金”“面積”保留兩位小數(shù)。保存DWD層數(shù)據(jù)時按照行政區(qū)劃分對各城區(qū)的數(shù)據(jù)分別存儲。ADS層作為數(shù)倉的最后一層,主要是對上一層的數(shù)據(jù)進行匯總與整理。利用函數(shù)以及排序、分組和多表聯(lián)查等操作將DWD層生成的數(shù)據(jù)按具體需求進行分析后,編寫相應的Sqoop語句把數(shù)據(jù)存儲到HDFS中,為后續(xù)可視化中的各種統(tǒng)計報表提供數(shù)據(jù)。
知識服務是指通過信息技術手段,以用戶實際知識需求為中心,對相關知識信息進行采集、處理、存儲、分析,輔助提供智力決策,來協(xié)同解決用戶實際問題,實現(xiàn)知識增值[3]。本文以北京房價數(shù)據(jù)為例,通過分析6000多個小區(qū)的房價數(shù)據(jù),為北京的租客提供持續(xù)跟進的參考信息服務。
將所有房價數(shù)據(jù)格式化、一致化后按城區(qū)分組并通過降序升序和limit函數(shù)輸出各城區(qū)月租房價的最大值和最小值。如圖3,各城區(qū)每月租金最大為上方第一條折線,每月租金最小為第二條折線。通過數(shù)據(jù)節(jié)點的大小和折線趨勢能夠直觀地橫向和縱向比較各城區(qū)最大月租金和最小月租金,如“密云”的最小月租金最小,“順義”最大月租金最大。
圖3 各城區(qū)月租房價比較圖
在可視化工具中根據(jù)需要呈現(xiàn)的行政區(qū)劃形式來選擇,將待分析區(qū)域地理維度下的字段“城區(qū)”轉(zhuǎn)化為地理角色。構(gòu)建的地圖如圖4所示,以這些行政區(qū)劃為單位進行數(shù)據(jù)呈現(xiàn)。北京市各城區(qū)每平米平均房價地圖根據(jù)區(qū)域顏色深淺程度反映房價數(shù)值的大小,數(shù)值越大顏色越深。移動鼠標指針到區(qū)域可交互顯示相關參數(shù)信息,而點擊區(qū)域可下鉆目錄,通過氣泡圖(如圖5)比較同一行政區(qū)劃下各板塊的每平米平均房價。
圖4 北京市每平米平均房價地圖
圖5 昌平各版塊平均每平米房價氣泡圖
經(jīng)測試,系統(tǒng)穩(wěn)定靈活,能在較短時間內(nèi)準確輸出檢索內(nèi)容,同時具備跨平臺特征。本文結(jié)合大數(shù)據(jù)技術在個人知識庫領域進行初步嘗試,將傳統(tǒng)的個人知識庫賦能大數(shù)據(jù)特征,并通過北京房價數(shù)據(jù)分析進行應用實踐,期望為后續(xù)的研究提供一定的參考價值。