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