徐悅偉, 夏凌云
(中國石油大學(華東) 1.黨委辦公室、校長辦公室;2.信息化建設處, 山東 青島 266580)
高校作為典型的人群活動和聚集地,人員活動和軌跡具備以下特點。(1)活動區(qū)域較為封閉,廣大師生的工作生活區(qū)域大多都集中在校園內(nèi)部。(2)人員交流頻繁且隨機,除了固定的宿舍成員接觸外,學生和老師的上課、自習、餐飲、鍛煉等時段均可能產(chǎn)生大量的隨機人員交流。因此在出現(xiàn)公共衛(wèi)生事件時,能通過某些方法和機制對人群接觸情況和流動情況進行快速追溯和分析對于疾病防控顯得尤為重要。
但是當前在高校內(nèi)部進行人員的快速追溯和分析,還存在著一些問題。尤其是高校內(nèi)部人員在封閉空間的活動與常見鏈狀活動軌跡有很大的不同,呈現(xiàn)的是宿舍、教學樓等多場所進行活動的網(wǎng)狀軌跡。網(wǎng)狀軌跡帶來的主要挑戰(zhàn)有兩個:一是難以采樣。教學樓和餐廳之類的場所,聚集性和流動性都很高,難以保證手工打卡數(shù)據(jù)完備性的同時,也不利于正常教學生活的進行;二是分析難。人員在校內(nèi)的網(wǎng)狀活動軌跡的記錄將會不停累積海量的位置數(shù)據(jù),數(shù)據(jù)的存儲和關聯(lián)分析的難度非常大。如圖1所示。
鏈狀活動軌跡
為此,本文提出一種基于WLAN數(shù)據(jù)和Hive數(shù)據(jù)倉庫的高校公共衛(wèi)生事件人流溯源系統(tǒng),通過校園認證系統(tǒng)和無線網(wǎng)絡管理系統(tǒng)實現(xiàn)位置的初步采集[1],并通過Hadoop框架中的Flume、HDFS、MapReduce、Hive等組件,利用分布式計算技術實現(xiàn)對用戶海量位置數(shù)據(jù)的快速同步、存儲、建倉和分析。
在前期工作中,我們實現(xiàn)了如何利用校園無線網(wǎng)絡中的無線控制器和無線接入點定期捕獲用戶無線設備MAC地址和位置的對應關系,并對接認證系統(tǒng)找出MAC地址和用戶身份的對應關系,形成“身份-MAC-位置”的關聯(lián)信息,以日志文件的形式保存在無線定位服務系統(tǒng)中[1]。
Hadoop是一個Apache基金會主持的分布式計算基礎架構(gòu),主要基于HDFS分布式文件系統(tǒng)和MapReduce分布式計算模型,并與各種傳輸、查詢、計算、分析等組件組成的1個海量數(shù)據(jù)處理的技術框架。整個Hadoop框架具備高效、可靠、成本低等特點,已成為當前大數(shù)據(jù)技術的首選實現(xiàn)框架[2]。
本系統(tǒng)中主要使用了HDFS、MapReduce、Flume、Hive組件。HDFS、MapReduce作為最常見的基礎組件在其他文獻已有詳細的論述,在此不再贅述。
Hadoop作為一個開源生態(tài)框架,存在著生態(tài)組件分支較多,版本不一的問題。因此對于非大數(shù)據(jù)底層技術方向的研究人員來說,使用成熟的、便利的第三方發(fā)行版本可以使自身更聚焦于業(yè)務。本項目選擇的CDH發(fā)行版[3]是由Cloudera公司發(fā)行的較為常用的免費開源版本,能滿足大多數(shù)情況下的大數(shù)據(jù)存儲和分析需求。
Hive是Hadoop框架中的一個數(shù)據(jù)倉庫工具[4],主要功能如下。
(1) 將存儲在HDFS中的半結(jié)構(gòu)化的數(shù)據(jù)文件映射為數(shù)據(jù)表,數(shù)據(jù)分析人員可以直接使用類SQL語句來對HDFS內(nèi)數(shù)據(jù)文件進行讀取和分析。
(2) 將數(shù)據(jù)分析人員讀取數(shù)據(jù)時采用SQL語句轉(zhuǎn)化為MapReduce任務來執(zhí)行,使查詢數(shù)據(jù)過程可以充分和便利地利用Hadoop大數(shù)據(jù)并行處理優(yōu)勢。
因此Hive的優(yōu)勢是可以很好地利用HDFS和MapReduce的分布式大數(shù)據(jù)處理能力的同時,沿用關系型數(shù)據(jù)庫的分析方式和經(jīng)驗進行高效的在線數(shù)據(jù)分析。Hive對數(shù)據(jù)動態(tài)有寫入支持不佳、不支持流式數(shù)據(jù)實時處理的劣勢,對只需進行日志數(shù)據(jù)進行建倉和不定期查找的本項目來說不構(gòu)成較大影響。
Flume是CDH發(fā)行版中常用的日志收集工具[3],可將各業(yè)務系統(tǒng)的文件通過采集、聚合、傳輸、寫入的流程寫入到HDFS文件系統(tǒng)內(nèi),供其他Hadoop組件讀取和調(diào)用。
系統(tǒng)的總體框架如圖2所示。
圖2 系統(tǒng)總體框架設計
(1) 用戶接入層:所有用戶在該層接入校園無線網(wǎng)絡,并不斷產(chǎn)生并更新接入設備(MAC)和位置(AP)的對應關系。
(2) 數(shù)據(jù)采集層:該層通過定期采集用戶接入層的MAC-位置對應關系數(shù)據(jù),對接校園網(wǎng)認證系統(tǒng)中的“MAC-學工號”關系,將數(shù)據(jù)關聯(lián)為“學工號-位置”的數(shù)據(jù)記錄,實質(zhì)就是用戶位置信息表。每條數(shù)據(jù)加上采樣時間后,以文本文件的形式存放于定位系統(tǒng)的日志文件中。
(3) 數(shù)據(jù)同步層:該層通過Flume將數(shù)據(jù)采集層作為數(shù)據(jù)源,HDFS作為保存節(jié)點,通過定時任務將定位日志數(shù)據(jù)定期匯總采集到HDFS中進行存儲。
(4) 數(shù)據(jù)存儲層:本層利用HDFS文件系統(tǒng)對不停同步過來的位置日志數(shù)據(jù)進行分布式存儲,同時HDFS也是后期進行數(shù)據(jù)分析的基礎文件系統(tǒng)。
(5) 數(shù)據(jù)封裝層:數(shù)據(jù)封裝層使用數(shù)倉工具Hive,將所有日志文件封裝為支持類SQL查詢的數(shù)據(jù)表,以便后期查詢[5]。
(6) 數(shù)據(jù)分析層:分析人員可以按傳統(tǒng)模式設計查詢的SQL語句,并通過命令行方式輸入查詢語句,Hive會將SQL語句自動解析為MapReduce語句去讀取封裝好的數(shù)據(jù)倉庫數(shù)據(jù),并返回最終期望的查詢結(jié)果。
系統(tǒng)中的用戶接入層和數(shù)據(jù)采集層已在前期完成了部署和使用[1],并將位置信息存放在固定文件夾,文件采用“,”符號分隔不同數(shù)據(jù)項,用“ ”符號作為數(shù)據(jù)條目間的劃分。本系統(tǒng)的部署和配置還有以下關鍵步驟。
3.2.1 CDH的安裝
CDH提供了一個官方的自動化部署和運維工具Cloudera Manager,具備完善的CDH集群的自動安裝、集中管理基于集群的監(jiān)控和告警功能。通過Cloudera Manager安裝CDH主要分為3大步驟。
(1) 服務器和操作系統(tǒng)準備:主要內(nèi)容包含準備3臺安裝好的Linux系統(tǒng)服務器,并配置好服務器時間服務、Hosts域名解析、相互的免密碼登錄、防火墻和SELinux等基礎配置。
(2) 安裝Cloudera Manager:在服務器上安裝MySQL數(shù)據(jù)庫、Oracle JDK1.8、Httpd服務,以便安裝者通過Web瀏覽器圖形化操作Cloudera Manager。通過Yum安裝Cloudera Manager,并在各臺服務器配置啟動項配置,啟動Cloudera Manager服務。
(3) 安裝CDH:通過Cloudera Manager的Web管理端在圖形化界面上按提示輸入安裝參數(shù)。由于我們本項目需求的組件比較少,因此僅需選擇核心Hadoop服務組合即可,包含Hadoop框架最常用和必須的HDFS、YARN(內(nèi)含MapReduce2)、Zookeeper(分布式組件協(xié)調(diào))、Oozie(Hadoop工作流調(diào)度引擎)、HUE(Hadoop圖形化UI)以及Hive組件進行自動安裝直到結(jié)束。
3.2.2 Flume安裝和配置
安裝好集群后,需要分別在Hadoop集群和無線定位系統(tǒng)服務器上安裝FlumeAgent來實現(xiàn)數(shù)據(jù)同步。在CDHHadoop集群的“集群”-“操作”下選擇“添加服務”,按提示選擇在主節(jié)點安裝Flume組件。在無線定位系統(tǒng)服務器端可直接使用Flume安裝包來安裝FlumeAgent。
每個FlumeAgent都分為3個部分:Source、Channel、Sink。Source代表數(shù)據(jù)流的源頭;Channel代表數(shù)據(jù)傳輸?shù)木彺婧凸艿?Sink代表數(shù)據(jù)傳輸?shù)慕K點。可以通過將一個Agent的Sink和另外一個Agent的Source進行來實現(xiàn)多個Agent之間的數(shù)據(jù)流串聯(lián)同步。我們在無線定位服務器端和Hadoop集群端分別安裝FlumeAgent,并將無線定位服務器的Sink和Hadoop集群的Source通過Avro的網(wǎng)絡RPC方式進行串聯(lián),實現(xiàn)普通Log數(shù)據(jù)文件到Hadoop分布式文件系統(tǒng)的傳輸。實現(xiàn)方案和配置[6]如圖3所示。
圖3 通過Flume實現(xiàn)數(shù)據(jù)同步
3.2.3 Hive建倉
完成上述配置后,在定位服務器和Hadoop集群上啟動Flume進程,即可開啟數(shù)據(jù)同步。隨后的Hive建倉和查詢需要在HiveShell內(nèi)進行,過程如下。
(1) 創(chuàng)建數(shù)據(jù)倉庫search
hive>create database search;
(2) 創(chuàng)建外部數(shù)據(jù)表lbs,包含3個數(shù)據(jù)項:user、ap、time,同時指定數(shù)據(jù)項之間分隔符為逗號,數(shù)據(jù)行之間分隔符為回車符。
hive>create EXTERNAL table lbs(user string,apstring,time string,)
>ROW FORMAT DELIMITED
>FIELDS TERMINATED BY ','
>LINES TERMINATED BY ' '
>stored as textfile;
(3) 將hdfs://Locationlog/下的所有Log文件與Lbs表進行關聯(lián)
hive>LOAD DATA INPATH 'hdfs://Locationlog/' INTO TABLE lbs;
至此,使用SQL語句“select * from lbs”,即可發(fā)現(xiàn)日志數(shù)據(jù)已加載至Hive中Search數(shù)據(jù)庫的Lbs數(shù)據(jù)表中。
3.2.4 分布式查詢
我們可以通過SQL語句來指定各種查詢條件和關聯(lián)條件,Hive將會把SQL語句自動轉(zhuǎn)換為MapReduce語句,在海量的日志數(shù)據(jù)中進行分布式查找并返回結(jié)果。最終實現(xiàn)諸如“查找某個時間階段內(nèi)處于同一個AP下的所有用戶”,或者“追溯某些用戶、空間或時間的關聯(lián)性”等系統(tǒng)設計目標。
根據(jù)以上方式搭建的Hive數(shù)倉,結(jié)合前期的“AC-AP-位置”管理模塊和Echarts圖表模塊,在實際中得到了很好的應用。在Hive數(shù)倉基礎上搭建的WLAN終端軌跡記錄和分析系統(tǒng),實現(xiàn)了根據(jù)采樣時間點顯示人員聚集熱力圖,以及按人快速搜索查詢同AP下匯集人員功能,如圖4所示。
圖4 人員聚集熱力圖
本方案提出了一個通用可行的系統(tǒng)設計和實現(xiàn)方法,將海量的位置數(shù)據(jù)導入Hadoop并建立數(shù)據(jù)倉庫,實現(xiàn)分布式、并行的數(shù)據(jù)查找和分析,使高校內(nèi)部人員流動的數(shù)據(jù)化溯源的快速實現(xiàn)成為可能。其中大數(shù)據(jù)框架搭建和數(shù)據(jù)同步與建倉的方法,也可以推廣到其他非實時流式數(shù)據(jù)處理的海量數(shù)據(jù)挖掘和分析的場景。在下一步工作中,我們還需優(yōu)化Hive中數(shù)據(jù)的分區(qū)加載和使用,以提高數(shù)據(jù)查找和分析效率,同時優(yōu)化和豐富人流追溯的SQL語句,來實現(xiàn)更完善的和更個性化的查找需求。