康耀龍 馮麗露 張景安
(1.山西大同大學 計算機與網(wǎng)絡(luò)工程學院 山西省大同市 037009)
(2.山西大同大學 教育科學與技術(shù)學院 山西省大同市 037009 3.山西大同大學網(wǎng)絡(luò)信息中心 山西省大同市 037009)
我國道路基礎(chǔ)設(shè)施可以說是世界上最完善的國家,道路的復雜情況也可以說是世界上最復雜的國家之一。在大量的車流量數(shù)據(jù)中分析和找出超速、事故逃逸等情況,一般的技術(shù)是難以解決的,而且每天車流量不是固定的,車量行駛路線也極其復雜,所以必須使用大數(shù)據(jù)技術(shù)。本系統(tǒng)使用了現(xiàn)在主流的Apache Spark 分布式計算引擎對以上問題予以解決。
現(xiàn)實中道路卡口收集的數(shù)據(jù)是雜亂的、非結(jié)構(gòu)化的,使用傳統(tǒng)模式來存儲數(shù)據(jù)需要對這些數(shù)據(jù)進行大量的轉(zhuǎn)換,而且要分離出大量的表,表與表之間存在大量的聯(lián)系,這樣會使本來簡單的描述數(shù)據(jù)變的復雜,由于表和表的聯(lián)系增多,表查詢的復雜度會急劇增加;而且數(shù)據(jù)的收集是每分每秒,所以這會是一個海量的數(shù)據(jù),傳統(tǒng)數(shù)據(jù)庫來存儲如此大量的數(shù)據(jù)會使硬件激增,而且總有一天會達到存儲的閾值,到時需要做數(shù)據(jù)遷移也會是一個巨大的難題。
本系統(tǒng)采用的是分布式文件存儲系統(tǒng)HDFS(Hadoop Distributed File System)。HDFS 具有高容錯的特點,而且它部署在大量的普通的計算機硬件上,可以說是非常的廉價,但是它又具有超大的存儲量,而且是可以動態(tài)擴容,在根本上解決了存儲容量和成本的問題。HDFS 還可以結(jié)合HBase 使用,而HBase 是非結(jié)構(gòu)化數(shù)據(jù)庫,所以非結(jié)構(gòu)化數(shù)據(jù)存儲也迎刃而解。
整個平臺由應(yīng)用層、數(shù)據(jù)層和基礎(chǔ)層實現(xiàn)。應(yīng)用層是系統(tǒng)的核心層,關(guān)鍵技術(shù)在應(yīng)用層得以實現(xiàn)。這一層由分布式計算引擎,將數(shù)據(jù)層的數(shù)據(jù)處理。這些數(shù)據(jù)由Spark Core 進行抽取、轉(zhuǎn)換、加載。在這一層中還有數(shù)據(jù)的清洗,因為原始數(shù)據(jù)都是一些非結(jié)構(gòu)化,含有臟數(shù)據(jù),難以直接使用的數(shù)據(jù)。這些數(shù)據(jù)按照一定的規(guī)則,比如空數(shù)據(jù)用-1 代替,無效數(shù)據(jù)刪除,還要對外服務(wù)提供接口,進行數(shù)據(jù)的轉(zhuǎn)存。數(shù)據(jù)層也是大數(shù)據(jù)中心。這一層提供了非結(jié)構(gòu)化數(shù)據(jù)處理技術(shù)支持,本系統(tǒng)使用的是Apache Spark 1.6。結(jié)合Hive 將數(shù)據(jù)進行ETL 處理。本層是數(shù)據(jù)的存儲層,采用的技術(shù)是分布式文件系統(tǒng),對海量數(shù)據(jù)的管理?;A(chǔ)層也是獲取層。該層的主要作用是結(jié)合道路卡口和電警系統(tǒng)對數(shù)據(jù)進行收集,對日志文件的收集。在收集過程中也會進行簡單的ETL 操作,本層是數(shù)據(jù)的來源層。系統(tǒng)總體結(jié)構(gòu)如圖1 所示。
圖1:系統(tǒng)總體結(jié)構(gòu)圖
本系統(tǒng)分析的數(shù)據(jù)來自非結(jié)構(gòu)化數(shù)據(jù),并對這些數(shù)據(jù)進行處理過后得到結(jié)果,需要將這些結(jié)果存在本地數(shù)據(jù)中,所以需要設(shè)計一些結(jié)果表,而這些結(jié)果表是根據(jù)后續(xù)的業(yè)務(wù)需求而定的。本系統(tǒng)有四個結(jié)果表,卡口狀態(tài)表、前N 車流量卡口表、前N 車流量卡口詳情表、車輛軌跡表。
道路卡口是數(shù)據(jù)收集的基礎(chǔ)硬件,如果某個或某些卡口發(fā)生故障,而沒有及時排查出來,那么該卡口監(jiān)控的道路將失去聯(lián)系。該模塊主要功能是檢測和排查異常的卡口攝像頭。通過收集的數(shù)據(jù)檢索出正常攝像頭個數(shù)與實際的攝像頭個數(shù)是否相等,可以判斷有多少攝像頭故障,記錄下異常攝像頭個數(shù)。通過Spark 算子將所有數(shù)據(jù)分別加載到內(nèi)存中,然后將正常的和異常的攝像頭詳細信息按照一定的規(guī)則拼接到字符串中。將數(shù)據(jù)緩存、入庫以備后面的工程使用。
卡口車流量是確定該路段交通是否繁忙,什么時間段最繁忙,提供數(shù)據(jù)支持,在哪些路段需要增派警力協(xié)助交通管理。本模塊通過上一個模塊的落地數(shù)據(jù)進行進一步的計算和分析,經(jīng)過上一輪分析,數(shù)據(jù)不是很大,可以直接加載至內(nèi)存計算。將所有數(shù)據(jù)加載至內(nèi)存后,使用Spark 算子進行迭代運算,將每一條數(shù)據(jù)按照一定的規(guī)則切分,得到了每個卡口下經(jīng)過的車輛總數(shù)。然后將每個卡口的車輛總數(shù)進行二次排序,得到需要的最高車流量卡口的編號以及具體信息。
卡口車流量分析模塊關(guān)鍵代碼:
該模塊是對最可能發(fā)生事故的路段進行數(shù)據(jù)的轉(zhuǎn)存,如何確定哪些路段最可能發(fā)生故障,是這個模塊的關(guān)鍵。最有效的方法是通過機器學習算法做出一個模型,再將每個卡口收集的數(shù)據(jù)帶入該算法模型,進行道路預(yù)測。而本系統(tǒng)沒有機器學習功能,所以通過經(jīng)驗來確定,也就是車流量最高的路段最容易發(fā)生事故。所以經(jīng)過卡口車流量分析模塊分析后,得到的一系列車流量最多的卡口號。再把這些卡口的數(shù)據(jù)經(jīng)過算子的清洗和切分,就能得到這些卡口所監(jiān)控到的所有的車輛信息。通過Apache Spark 內(nèi)部提供的JDBC 接口將數(shù)據(jù)寫入MySQL 中。
車輛軌跡刻畫模塊是追蹤可疑車輛的最好的方法。在確定某一輛車的車牌之后,就可以根據(jù)該車輛的行動路線確定該車主是否是可疑分子。本模塊先將車牌號加載至廣播變量中,與所有的數(shù)據(jù)進行對比,得到一系列的卡口號。再將這些卡口的所有數(shù)據(jù)加載至內(nèi)存中,根據(jù)算子將每個卡口的時間提取出來,然后按照時間的先后順序進行二次排序。這樣該車輛經(jīng)過的卡口順序就得到了,最后通過算子將每個卡口號和地域名進行字符串的拼接,得到該車輛的軌跡路線。
系統(tǒng)測試是確定該系統(tǒng)是否完成開發(fā),確定它是否存在較大缺陷的最主要的方法。在測試環(huán)境下本系統(tǒng)的總體運行情況很穩(wěn)定。模擬現(xiàn)實卡口數(shù)據(jù)的情況,整個集群在啟動過程中沒有出現(xiàn)問題,通過Apache Spark 官方提供的Web UI 觀察每個應(yīng)用程序和Job 的運行情況均沒有錯誤,在數(shù)據(jù)庫中的運行結(jié)果的查詢也正確。
本系統(tǒng)使用的Apache Spark 計算框架,讓車輛檢索的速度更快,可以在幾分鐘內(nèi)檢索海量信息,最快速的發(fā)現(xiàn)問題,對于道路上的緊急情況能夠更快的做出反應(yīng),本系統(tǒng)針對道路上的主要問題給出了解決方案。卡口狀態(tài)分析模塊能夠及時發(fā)現(xiàn)道路基礎(chǔ)設(shè)施是否故障,而且能夠確定哪些路段是事故多發(fā)、繁忙路段,什么時間段是事故的多發(fā)期,從而可以增派警力對這些路段的交通進行梳理。車輛軌跡刻畫模塊可以及時發(fā)現(xiàn)可疑車輛,并對可疑車輛進行監(jiān)控和定位,幫助警方更快的破案。