国产日韩欧美一区二区三区三州_亚洲少妇熟女av_久久久久亚洲av国产精品_波多野结衣网站一区二区_亚洲欧美色片在线91_国产亚洲精品精品国产优播av_日本一区二区三区波多野结衣 _久久国产av不卡

?

基于Storm的車輛實(shí)時(shí)展示系統(tǒng)

2018-01-20 06:42張博
電腦知識(shí)與技術(shù) 2018年31期
關(guān)鍵詞:三維

張博

摘要:隨著汽車保有量的不斷增長(zhǎng),城市交通網(wǎng)絡(luò)也變得日益臃腫。如何實(shí)時(shí)準(zhǔn)確地掌握交通現(xiàn)狀,減少交通擁堵,提高出行效率,是智慧交通的核心所在。該文針對(duì)傳統(tǒng)車輛分析平臺(tái)實(shí)時(shí)性較差、呈現(xiàn)方式不直觀等缺點(diǎn),設(shè)計(jì)了一種基于大數(shù)據(jù)實(shí)時(shí)流式處理技術(shù)的三維展示系統(tǒng)。系統(tǒng)分為數(shù)據(jù)采集、數(shù)據(jù)分發(fā)、實(shí)時(shí)處理以及三維展示幾個(gè)部分。為保證系統(tǒng)并發(fā)量,采用高吞吐量的Kafka作為數(shù)據(jù)分發(fā)模塊,同時(shí)引入Storm對(duì)Kafka中數(shù)據(jù)進(jìn)行消費(fèi)、處理,通過WebSocket推送至Web頁面,頁面采用WebGL技術(shù)將車輛數(shù)據(jù)實(shí)時(shí)展示。與傳統(tǒng)系統(tǒng)相比,該系統(tǒng)具有高吞吐、低延時(shí)、準(zhǔn)確直觀等特點(diǎn),可幫助解決一系列交通問題。

關(guān)鍵詞:實(shí)時(shí)處理;三維;Storm;WebGL

中圖分類號(hào):TP311? ? ? 文獻(xiàn)標(biāo)識(shí)碼:A? ? ? 文章編號(hào):1009-3044(2018)31-0101-03

1 背景

社會(huì)的飛速發(fā)展促進(jìn)了城市車輛的需求增加,隨之帶來了車輛數(shù)據(jù)的爆發(fā)式增長(zhǎng)。我們雖可借助Hadoop相關(guān)技術(shù)完成車輛數(shù)據(jù)的大規(guī)模處理,但是分批次處理作業(yè)的模式使得其很難實(shí)現(xiàn)秒級(jí)的延時(shí)。針對(duì)批量處理數(shù)據(jù)存在的問題,實(shí)時(shí)處理方式應(yīng)運(yùn)而生。

Twitter的Storm是一個(gè)開源的實(shí)時(shí)流式計(jì)算框架,比其他流計(jì)算產(chǎn)品更具優(yōu)勢(shì)。該文基于Storm設(shè)計(jì)并實(shí)現(xiàn)了一種車輛實(shí)時(shí)展示系統(tǒng),可實(shí)時(shí)處理并展示大量車輛數(shù)據(jù)。

2 相關(guān)技術(shù)

2.1 Storm流式處理框架

Storm是一套分布式、可靠、可容錯(cuò)的用于處理流式數(shù)據(jù)的框架,其流式處理作業(yè)被分發(fā)至不同類型的組件,每個(gè)組件負(fù)責(zé)一項(xiàng)簡(jiǎn)單的、特定的處理任務(wù)。相對(duì)于Hadoop,Storm能夠?qū)崿F(xiàn)可靠的無邊界流式數(shù)據(jù)的實(shí)時(shí)處理,彌補(bǔ)了Hadoop批處理所不能滿足的實(shí)時(shí)要求。同時(shí),Storm還具有以下幾個(gè)特點(diǎn):

1)編程簡(jiǎn)單:開發(fā)人員只需要關(guān)注應(yīng)用邏輯,類似于Hadoop提供的Map和Reduce原語,Storm也對(duì)數(shù)據(jù)的實(shí)時(shí)計(jì)算提供了簡(jiǎn)單Spout和Bolt原語。

2)高性能,低延遲:相比較批處理框架,可毫秒級(jí)響應(yīng)數(shù)據(jù)。

3)分布式:可以輕松應(yīng)對(duì)單個(gè)節(jié)點(diǎn)無法處理的海量數(shù)據(jù)。

4)可擴(kuò)展:Storm的處理作業(yè)是分布在多個(gè)節(jié)點(diǎn)之間,隨著數(shù)據(jù)量和計(jì)算量的增長(zhǎng),可水平擴(kuò)展系統(tǒng)。

5)容錯(cuò):如果某個(gè)節(jié)點(diǎn)出現(xiàn)故障,主節(jié)點(diǎn)會(huì)將任務(wù)重新分配至其他可用節(jié)點(diǎn)。

6)消息不丟失:Storm會(huì)保證每條消息均被處理,如果失敗,會(huì)嘗試重新處理此消息。

2.2 WebGL

WebGL是一種3D繪圖協(xié)議,這種繪圖技術(shù)標(biāo)準(zhǔn)允許把JavaScript和OpenGL ES 2.0結(jié)合在一起,從而為HTML5 Canvas提供硬件3D加速渲染,這樣Web開發(fā)人員就可以借助系統(tǒng)顯卡來在瀏覽器里更流暢地展示3D場(chǎng)景和模型,還能創(chuàng)建復(fù)雜的導(dǎo)航和數(shù)據(jù)視覺化。WebGL技術(shù)標(biāo)準(zhǔn)免去了開發(fā)網(wǎng)頁專用渲染插件的麻煩,可被用于創(chuàng)建具有復(fù)雜3D結(jié)構(gòu)的網(wǎng)站頁面,甚至可以用來設(shè)計(jì)3D網(wǎng)頁游戲等等。

3 系統(tǒng)設(shè)計(jì)

根據(jù)系統(tǒng)需求,對(duì)系統(tǒng)進(jìn)行分層設(shè)計(jì),主要包括數(shù)據(jù)采集、數(shù)據(jù)分發(fā)、實(shí)時(shí)處理以及三維展示,系統(tǒng)架構(gòu)如圖1所示。

1)數(shù)據(jù)采集:前端設(shè)備所采集到的車輛原始數(shù)據(jù)。

2)數(shù)據(jù)轉(zhuǎn)發(fā):Kafka順序存儲(chǔ)了采集設(shè)備發(fā)送來的消息,并按不同Topic分類,等待著Storm進(jìn)行拉取消費(fèi)。

3)實(shí)時(shí)處理:Storm消費(fèi)Kafka中數(shù)據(jù),并進(jìn)行數(shù)據(jù)標(biāo)準(zhǔn)化、數(shù)據(jù)推送、數(shù)據(jù)存儲(chǔ)等幾個(gè)步驟。

4)三維展示:Web頁面接收到WebSocket推送的數(shù)據(jù)后,實(shí)時(shí)繪制車輛。

4 系統(tǒng)實(shí)現(xiàn)

4.1 數(shù)據(jù)采集

數(shù)據(jù)采集層主要功能為匯聚前端采集設(shè)備的原始數(shù)據(jù),并通過TCP長(zhǎng)連接將數(shù)據(jù)推送至Kafka集群中。在發(fā)送消息之前,會(huì)對(duì)消息進(jìn)行分類,即指定Topic。在發(fā)送消息的過程中,加入了監(jiān)聽、異常處理等機(jī)制,避免數(shù)據(jù)重發(fā)、漏發(fā),保證數(shù)據(jù)準(zhǔn)確性。

4.2 數(shù)據(jù)分發(fā)

數(shù)據(jù)分發(fā)層向下接收采集設(shè)備推送的海量數(shù)據(jù),向上又要及時(shí)為高性能、低延時(shí)的Storm集群提供數(shù)據(jù),因此對(duì)消息框架的吞吐能力有很高要求。最終該系統(tǒng)采用Kafka作為數(shù)據(jù)分發(fā)層的實(shí)現(xiàn)。Kafka是一個(gè)高吞吐量的分布式發(fā)布訂閱消息系統(tǒng)。類比Kafka官網(wǎng)圖例,數(shù)據(jù)分發(fā)層結(jié)構(gòu)如圖2所示。

一個(gè)Kafka集群會(huì)包含producer,broker,consumer等角色。broker為消息中間處理節(jié)點(diǎn),一個(gè)Kafka節(jié)點(diǎn)就是一個(gè)broker,多個(gè)broker組成了Kafka集群。producer為生產(chǎn)者,負(fù)責(zé)發(fā)布消息到broker,對(duì)于該系統(tǒng),采集設(shè)備即為producer。consumer為消費(fèi)者,向broker讀取、消費(fèi)消息,該系統(tǒng)中的consumer為Storm集群。

在數(shù)據(jù)分發(fā)層與實(shí)時(shí)處理層之間,還有一層分布式協(xié)調(diào)服務(wù)Zookeeper。通過Zookeeper的集群協(xié)調(diào),可以充分保證大型集群的良好運(yùn)行。

4.3 實(shí)時(shí)處理

實(shí)時(shí)處理層會(huì)不停去拉取、消費(fèi)Kafka中的數(shù)據(jù),并對(duì)多種Topic類別的數(shù)據(jù)進(jìn)行標(biāo)準(zhǔn)化、推送、入庫等處理。為應(yīng)對(duì)海量數(shù)據(jù)的高并發(fā),該系統(tǒng)并沒有使用傳統(tǒng)的JAVA多線程等方式,而是采用了Storm實(shí)時(shí)流處理系統(tǒng)。類似Hadoop集群,Storm也有一些基本組件。Storm集群分為控制節(jié)點(diǎn)(Master)和工作節(jié)點(diǎn)(Worker),在這兩種節(jié)點(diǎn)上分別運(yùn)行著后臺(tái)程序Nimbus和Supervisor。Nimbus負(fù)責(zé)分配任務(wù)(也就是Topology)給各個(gè)工作節(jié)點(diǎn),Supervisor則負(fù)責(zé)管理每個(gè)具體的工作節(jié)點(diǎn)。實(shí)際在工作節(jié)點(diǎn)上運(yùn)行的是Spout或Bolt。系統(tǒng)中Storm的處理流程如圖3所示。

Spout從外部源讀取數(shù)據(jù),并用Storm中的數(shù)據(jù)結(jié)構(gòu)Tuple將數(shù)據(jù)發(fā)給Bolt,Bolt為邏輯處理單元,進(jìn)行一系列處理后,再調(diào)用emit()方法將數(shù)據(jù)以Tuple格式發(fā)射出去。

在該系統(tǒng)中,KafkaSpout為數(shù)據(jù)源,它從Kafka集群中讀取消息,并發(fā)送給carNormalizerBolt;因?yàn)閿?shù)據(jù)來源于Kafka中的不同Topic,格式有所不同,所以在carNormalizerBolt里做數(shù)據(jù)標(biāo)準(zhǔn)化的處理。我們定義一個(gè)標(biāo)準(zhǔn)的Car類JavaBean,將消息的各個(gè)字段賦值給Car類,并進(jìn)行字段補(bǔ)全或是丟棄等異常處理,之后將Car類發(fā)射給carSourceBolt;在carSourceBlot里,主要調(diào)用http接口將Car類發(fā)送至頁面對(duì)應(yīng)的Web后臺(tái),同時(shí)將Car類發(fā)射給carSaveBolt;carSaveBolt通過獲得數(shù)據(jù)庫連接池中的實(shí)例,將Car類持久化存儲(chǔ)至MySQL數(shù)據(jù)庫,方便Web頁面查詢展示。

構(gòu)建處理流程的拓?fù)浯a如下:

//配置Kafka集群信息

BrokerHosts brokerHost = new ZkHosts(zkHost);

SpoutConfig carSpoutConfig = new SpoutConfig(brokerHost, carTopic, zkRoot, "data-car");

carSpoutConfig.scheme = new SchemeAsMultiScheme(new StringScheme());

//使用Kafka數(shù)據(jù)源作為Spout

KafkaSpout carSpout = new KafkaSpout(carSpoutConfig);

//新建一個(gè)Topology

TopologyBuilder builder = new TopologyBuilder();

//建立拓?fù)浣Y(jié)構(gòu)

builder.setSpout("kafkaCarSpout", carSpout, 3);

builder.setBolt("carNormalizerBolt", new CarNormalizerBolt(), 2)

.shuffleGrouping("kafkaCarSpout");

builder.setBolt("carSourceBolt", new CarSourceBolt(),2)

.shuffleGrouping("carNormalizerBolt");

builder.setBolt("carSaveBolt", new CarSaveBolt(), 2)

.shuffleGrouping("carSourceBolt");

4.4 三維展示

為能更準(zhǔn)確、直觀的展示實(shí)際路況的車輛信息、流量信息等,展示層通過WebGL模擬實(shí)際的三維場(chǎng)景,并實(shí)時(shí)繪制車輛。系統(tǒng)展示層采用B/S架構(gòu),前后端分離設(shè)計(jì)。展示層邏輯如圖4所示。

Storm集群將標(biāo)準(zhǔn)化的數(shù)據(jù)以Http接口方式傳遞給后臺(tái),后臺(tái)程序接收到數(shù)據(jù)后,通過WebSocket把數(shù)據(jù)推送至前端頁面。js腳本取得數(shù)據(jù)后,調(diào)用車輛繪制接口完成實(shí)時(shí)展示功能。繪制接口由WebGL相關(guān)js封裝成類,向外提供。同時(shí),頁面還具有查詢功能,即通過調(diào)用后臺(tái)接口,將Storm集群存儲(chǔ)至MySQL的數(shù)據(jù)以表格方式展現(xiàn)。

5 系統(tǒng)測(cè)試

通過系統(tǒng)測(cè)試,我們可以與系統(tǒng)的需求進(jìn)行比較,從而發(fā)現(xiàn)系統(tǒng)的缺陷與不足。

5.1 功能測(cè)試

首先進(jìn)行功能測(cè)試。功能測(cè)試主要有兩點(diǎn):

1)測(cè)試系統(tǒng)是否能從采集設(shè)備獲取到車輛數(shù)據(jù),并通過Storm標(biāo)準(zhǔn)化并實(shí)時(shí)展示在三維場(chǎng)景中。登錄系統(tǒng),等待三維場(chǎng)景加載完成后,采集到的車輛信息(如車型、車輛顏色等)實(shí)時(shí)展示在場(chǎng)景中,功能截圖如圖5。

2)測(cè)試系統(tǒng)是否能從MySQL數(shù)據(jù)庫中查詢到采集的車輛數(shù)據(jù)。在頁面中選擇時(shí)間段、車輛類型、采集設(shè)備等相關(guān)條件,點(diǎn)擊查詢,即可查到采集的車輛數(shù)據(jù)。數(shù)據(jù)查詢結(jié)果界面如圖6。

從功能測(cè)試結(jié)果來看,該系統(tǒng)已完成了匯聚采集設(shè)備數(shù)據(jù)、標(biāo)準(zhǔn)化數(shù)據(jù)并實(shí)時(shí)三維展示、數(shù)據(jù)存入數(shù)據(jù)庫并可查詢等一系列功能。

5.2 性能測(cè)試

通過查看Storm集群提供的性能監(jiān)測(cè)頁面我們可以發(fā)現(xiàn),kafkaCarSpout、carNormalizerBolt、carSourceBolt及carSaveBolt處理每條Tuple的速度分別為3.29ms、1.16ms、0.38ms和0.73ms,如圖7所示??梢奡torm能以10ms內(nèi)的響應(yīng)速度處理采集設(shè)備的每條采集數(shù)據(jù)。

6 總結(jié)與展望

該文主要介紹在海量數(shù)據(jù)的應(yīng)用背景下,如何利用大數(shù)據(jù)技術(shù)解決傳統(tǒng)車輛分析平臺(tái)存在的問題。最終,該文采用Kafka、Storm等大數(shù)據(jù)框架傳輸、處理數(shù)據(jù),通過WebGL對(duì)道路車輛的實(shí)時(shí)繪制,為大數(shù)據(jù)車輛分析,緩解擁堵等決策提供有力支持。

參考文獻(xiàn):

[1] 楊杰, 朱邦培, 吳宏偉. 基于Storm的高速公路實(shí)時(shí)交通指數(shù)評(píng)估方法的研究與實(shí)現(xiàn)[J]. 計(jì)算機(jī)應(yīng)用研究, 2017, 34(9): 2707-2713.

[2] 亓開元, 趙卓峰, 房俊, 等. 針對(duì)高速數(shù)據(jù)流的大規(guī)模數(shù)據(jù)實(shí)時(shí)處理方法[J]. 計(jì)算機(jī)學(xué)報(bào), 2012, 35(3):? 476-490.

[3] 王雅瓊, 楊云鵬, 樊重俊. 智慧交通中的大數(shù)據(jù)應(yīng)用研究[J]. 物流工程與管理, 2015, 37(5): 107-108.

[4] 張春風(fēng), 申飛, 張俊, 等. 基于 Storm 的車聯(lián)網(wǎng)數(shù)據(jù)實(shí)時(shí)分析系統(tǒng). 計(jì)算機(jī)系統(tǒng)應(yīng)用, 2018, 27(3): 44-50.

[5] Maarala AI, Rautiainen M, Salmi M. et al. Low latency analytics for streaming traffic data with Apache Spark[C]. IEEE International Conference on Big Data. Santa Clara, CA, USA.2015: 2855-2858.

猜你喜歡
三維
初中作文“練筆·日記·作文”三維寫作教學(xué)初探
三維數(shù)字化移交技術(shù)在化工項(xiàng)目工程設(shè)計(jì)中的應(yīng)用剖析