張 帆 黃 茜 文元橋 黃 亮 周春輝 張哲源
(武漢理工大學(xué)航運(yùn)學(xué)院1) 武漢 430063) (內(nèi)河航運(yùn)技術(shù)湖北省重點(diǎn)實驗室2) 武漢 430063) (國家水運(yùn)安全工程技術(shù)研究中心3) 武漢 430063) (武漢理工大學(xué)智能交通系統(tǒng)研究中心4) 武漢 430063)
海上交通的日益繁忙導(dǎo)致船舶尾氣排放量迅速上升.我國交通運(yùn)輸部于2015年末設(shè)立了珠三角、長三角、環(huán)渤海(京津冀)水域船舶大氣污染物排放控制區(qū),控制船舶尾氣中硫氧化物、氮氧化物和顆粒物的排放[1].為了掌握船舶尾氣中各種物質(zhì)的排放含量,趙海鷗等[2]利用多種有害氣體傳感器對船舶柴油機(jī)尾氣排放數(shù)據(jù)進(jìn)行實時采集,并通過無線通信技術(shù)對將數(shù)據(jù)傳輸回地面,但當(dāng)前針對船舶尾氣中硫氧化物、氮氧化物和顆粒物進(jìn)行檢測的傳感器發(fā)展尚不成熟,且價格高昂,并不適合海港大范圍的部署.目前絕大部分船舶都配備了AIS設(shè)備[3],且船舶AIS數(shù)據(jù)蘊(yùn)含信息量大,包含船舶水上移動通信業(yè)務(wù)標(biāo)識碼(maritime mobile service identify,MMSI)、航向、對地航速、船位等一系列船舶航行過程中的狀態(tài)數(shù)據(jù)和船舶主機(jī)功率、始發(fā)港、目的港、裝載貨物信息等一系列船舶及貨物屬性數(shù)據(jù).近年來國內(nèi)外學(xué)者[4-11]多利用船舶AIS數(shù)據(jù)結(jié)合船舶尾氣排放計算模型對各自研究水域的船舶尾氣排放清單進(jìn)行離線計算.但傳統(tǒng)的船舶尾氣排放計算過程復(fù)雜,且沒有綜合考慮計算所需要的環(huán)境數(shù)據(jù)、船舶屬性等基礎(chǔ)數(shù)據(jù),計算結(jié)果不能客觀反映船舶尾氣排放值.同時想通過傳統(tǒng)的尾氣排放計算模型滿足實時的在線監(jiān)測,需要監(jiān)測范圍所有船舶的AIS數(shù)據(jù),這樣的計算規(guī)模是傳統(tǒng)單機(jī)計算程序無法承受的.
為了滿足監(jiān)管部門對管轄水域船舶尾氣排放實時監(jiān)管的需求,本文設(shè)計了一種基于Spark計算框架的船舶尾氣實時計算方法,該方法可以針對計算數(shù)據(jù)量的大小對排放計算能力進(jìn)行實時調(diào)控,使監(jiān)管部門能夠?qū)崟r掌握船舶尾氣排放動態(tài).相比于Storm、Flink等其他主流的流式數(shù)據(jù)計算框架,Spark不僅具備強(qiáng)大的實時計算能力,還具有離線數(shù)據(jù)批處理和機(jī)器學(xué)習(xí)能力,將更加利于今后隨著處理數(shù)據(jù)量的增大對計算功能的擴(kuò)展和優(yōu)化.
單船尾氣排放模型可以計算出船舶航行中每個軌跡段所產(chǎn)生的各類尾氣排放值,然后將計算出來的尾氣排放值映射到網(wǎng)格化處理[12]的區(qū)域地圖上,最后疊加在一起即完成某區(qū)域內(nèi)所有船舶的尾氣排放計算,見圖1.
圖1 船舶區(qū)域排放計算示意圖
基于AIS的單船船舶廢氣排放量計算式為[13]
Pa×LFa×Ta×EFi,a+Pb×LFb×Tb×EFi,b
(1)
式中:E為船舶尾氣排放量.g;P為船舶動力設(shè)備功率,kW;i為第i種船舶尾氣排放物;j為船舶動力設(shè)備類型;下標(biāo)m為主機(jī)、a為輔機(jī)、b為鍋爐;LF為船舶負(fù)荷因子;T為船舶在設(shè)備j工況下的運(yùn)行時間,h;EFi,j為第i種船舶尾氣物在第j種動力設(shè)備工況下的排放因子,g/(kW·h).
式(1)利用船舶AIS動態(tài)軌跡可以推算船舶各個動力設(shè)備的運(yùn)行時間,并基于船舶MMSI標(biāo)識從船級社數(shù)據(jù)、勞式數(shù)據(jù)庫等海事基礎(chǔ)數(shù)據(jù)中關(guān)聯(lián)查詢船舶動力設(shè)備額定功率P、設(shè)計航速等關(guān)鍵參數(shù),進(jìn)而能夠估算船舶動力設(shè)備的負(fù)荷情況,其中負(fù)荷因子采用式(2)進(jìn)行計算,完成上述參數(shù)計算后從而實現(xiàn)單船尾氣排放量估算.
LF=(Vs/Vmax)3
(2)
式中:Vs為船舶航行時的實際速度,kn,數(shù)據(jù)來源于船舶AIS信息,對于船舶航行的實際速度,由于AIS信息在時間尺度上不均勻,因此,在進(jìn)行計算時需對不均勻的速度信息進(jìn)行插值處理;Vmax為船舶航行時的最大速度,kn,來源于勞氏海事數(shù)據(jù)庫等海事數(shù)據(jù)庫.
基于單船尾氣排放計算模型,可實現(xiàn)區(qū)域性船舶尾氣排放量的計算[14],見圖2.
圖2 區(qū)域船舶排放計算流程圖
在船舶尾氣排放計算過程中需要計算緩存數(shù)據(jù),并且需要調(diào)用環(huán)境數(shù)據(jù)、船舶屬性、排放計算因子等多種類型數(shù)據(jù),而排放計算引擎Spark自身的廣播變量屬性無法滿足動態(tài)共享數(shù)據(jù)的設(shè)計需求,普通的外部數(shù)據(jù)庫又無法達(dá)到Spark高速內(nèi)存計算的速度,所以平臺選用讀寫性能優(yōu)異的Redis內(nèi)存數(shù)據(jù)庫[15]作為尾氣計算所設(shè)計的高速緩存,并將Redis連接池作為Spark廣播變量提供各個計算節(jié)點(diǎn)調(diào)用,進(jìn)而提供更高效的數(shù)據(jù)使用效率.
與處理傳統(tǒng)的歷史AIS離線數(shù)據(jù)不同,實時計算平臺無法預(yù)先對所有數(shù)據(jù)進(jìn)行組織與排序,所有流程必須在線完成.在Spark Streaming 中,處理數(shù)據(jù)的單位是一批而不是單條,而數(shù)據(jù)采集卻是逐條進(jìn)行的,因此,Spark Streaming 需要設(shè)置間隔使得數(shù)據(jù)匯總到一定的量后再一并操作,這個間隔就是批處理間隔.批處理間隔是Spark Streaming 的核心概念和關(guān)鍵參數(shù),它決定了Spark Streaming 提交作業(yè)的頻率和數(shù)據(jù)處理的延遲,同時也影響著數(shù)據(jù)處理的吞吐量和性能.Spark Streaming就是通過依次、快速的批處理指定時間間隔的數(shù)據(jù)塊來實現(xiàn)秒級的準(zhǔn)實時計算.圖3數(shù)據(jù)流中的每一個數(shù)據(jù)塊里都包含了區(qū)域船舶在該時間區(qū)間內(nèi)的所有AIS數(shù)據(jù),因為船舶AIS數(shù)據(jù)中的MMSI碼是唯一的,利用Spark對這些數(shù)據(jù)進(jìn)行相應(yīng)處理后即可以根據(jù)MMSI碼提取出各條船舶的軌跡段.
圖3 AIS船舶軌跡提取流程
在具體實現(xiàn)中,Spark Streaming中將實時數(shù)據(jù)流中的每一個相同時間間隔數(shù)據(jù)塊讀取成彈性分布式數(shù)據(jù)集(resilient distributed datasets,RDD)對象.圖4a)為多條AIS數(shù)據(jù).為了能對AIS數(shù)據(jù)中的MMSI信息進(jìn)行識別以區(qū)分不同的船舶,須將RDD轉(zhuǎn)換為圖4b)中Key-Value形式Pair RDD對象,把MMSI信息最為每條數(shù)據(jù)的Key值,其余信息作為Value.之后對轉(zhuǎn)換得到的Pair RDD對象進(jìn)行g(shù)roup By Key操作,此操作會將具有相同MMSI的AIS數(shù)據(jù)聚合在一起,最后對聚合得到的每一個AIS軌跡點(diǎn)集合按時間信息進(jìn)行排序,就將離散的軌跡點(diǎn)集合成一條條AIS軌跡段,見圖4c).
a)RDD b) PairRDD c)List
計算得到的各條船AIS軌跡數(shù)據(jù)并不能直接應(yīng)用于單船尾氣排放計算模型,因為會出現(xiàn)圖5中的情況.當(dāng)前計算中的數(shù)據(jù)塊與前面計算過的某一數(shù)據(jù)塊中都有××輪的AIS軌跡段,如果對這兩個軌跡段都單獨(dú)進(jìn)行單船尾氣排放計算,則前一AIS軌跡段中最后一個軌跡點(diǎn)Pe與當(dāng)前軌跡段中第一個Ps之間的船舶軌跡沒有參與單船排放計算,這種排放計算方式將產(chǎn)生較大的誤差,所以設(shè)計將Pe添加到Ps點(diǎn)前參加當(dāng)次的單船排放計算,通過這種方式實現(xiàn)不同數(shù)據(jù)塊中的同船軌跡段的前后關(guān)聯(lián),經(jīng)過軌跡前后關(guān)聯(lián)后的軌跡段即可應(yīng)用于單船連續(xù)軌跡的尾氣排放計算.
圖5 軌跡關(guān)聯(lián)流程
為實現(xiàn)同船軌跡的前后關(guān)聯(lián),在計算過程中,Spark集群將每條AIS軌跡段的最后一個軌跡點(diǎn)信息存入到Redis數(shù)據(jù)庫中,當(dāng)計算后面的數(shù)據(jù)塊時,Spark會去數(shù)據(jù)庫中尋找對應(yīng)船舶的軌跡點(diǎn),如果存在就添加到軌跡段首位參與計算,見圖6.
圖6 軌跡前后關(guān)聯(lián)示意圖
1) 單船尾氣排放計算 本文使用第1節(jié)中介紹的船舶尾氣排放測度模型對單船尾氣排放進(jìn)行計算.計算過程見圖7,針對每條船舶的AIS軌跡,依次選取軌跡中相鄰兩個AIS軌跡點(diǎn)數(shù)據(jù),將其帶入尾氣排放計算模型,得到船舶在每兩個軌跡點(diǎn)間所產(chǎn)生的尾氣排放量,進(jìn)而得到單船航行排放量.
圖7 單船尾氣排放計算流程
2) 排放軌跡插值 通過傳統(tǒng)的AIS軌跡單船尾氣排放算法計算出的排放值是分?jǐn)傇谲壽E段每兩個相鄰軌跡點(diǎn)之間,見圖8a).而AIS軌跡點(diǎn)在網(wǎng)格地圖中的分布是離散的、不連續(xù)的,因此,無法將軌跡段上的排放值連續(xù)地分配到各個網(wǎng)格上.本文針對該問題對排放軌跡進(jìn)行插值,插值方法選取王超等[16]提出的考慮航向、航速的插值方法,且選定每1秒進(jìn)行一次軌跡點(diǎn)插值,最終按各個網(wǎng)格點(diǎn)內(nèi)插值后軌跡點(diǎn)的數(shù)量對兩軌跡點(diǎn)間的排放量進(jìn)行分配,見圖8b),進(jìn)而得到單船尾氣排放量網(wǎng)格地圖,見圖8c).
圖8 排放軌跡插值示意圖
3) 區(qū)域尾氣排放計算 在Spark集群中經(jīng)過排放計算模型運(yùn)算并插值處理后就得到了單船排放量網(wǎng)格數(shù)據(jù),數(shù)據(jù)形式為Pair RDD,其中Key值為網(wǎng)格索引,Value為各類大氣污染物排放量,最后利用Spark提供的reduce By Key方法將具有相同網(wǎng)格索引的各類排放物總量疊加、合并在一起,形成區(qū)域排放量網(wǎng)格數(shù)據(jù),見圖9.
圖9 區(qū)域尾氣排放計算流程示意圖
實驗選用Inter Core I5處理器單核心、1GB內(nèi)存的單節(jié)點(diǎn)Spark對不同的數(shù)據(jù)量的AIS進(jìn)行排放計算,經(jīng)測試,該配置的Spark單節(jié)點(diǎn)每秒鐘可以計算150條數(shù)據(jù),總計算延時為879 ms,小于1 s,見圖10.
圖10 單節(jié)點(diǎn)Spark計算性能圖
為了測試基于Spark的排放計算方法對計算能力的橫向擴(kuò)展效果,對擁有不同節(jié)點(diǎn)數(shù)的Spark集群進(jìn)行了計算壓力測試,實驗證明隨著計算節(jié)點(diǎn)數(shù)的增加,算法每秒鐘的計算能力得到了有效的提高,見圖11.
圖11 Spark集群計算性能圖
將2014年深圳港的AIS歷史數(shù)據(jù)以及模擬風(fēng)、浪、流環(huán)境數(shù)據(jù)放入云端服務(wù)器,并模擬真實的AIS數(shù)據(jù)和環(huán)境數(shù)據(jù)發(fā)送方式對云端數(shù)據(jù)集進(jìn)行播發(fā),進(jìn)而提供實時數(shù)據(jù)源.將云端的數(shù)據(jù)源接入到基于Spark的排放計算程序后,程序可以實時計算出深圳港水域的排放數(shù)據(jù).通過瀏覽器前端定時去服務(wù)端請求實時尾氣排放計算數(shù)據(jù),實現(xiàn)排放數(shù)據(jù)的可視化顯示,圖12為深圳港水域1 h內(nèi)的船舶主機(jī)、輔機(jī)CO2累計排放地圖.
圖12 深圳港船舶尾氣排放可視化效果圖
通過基于Spark的船舶尾氣排放模型設(shè)計和基于GIS的深圳港船舶尾氣排放平臺構(gòu)建,實現(xiàn)了基于AIS數(shù)據(jù)的船舶尾氣排放實時監(jiān)測,便于海事管理部門等監(jiān)管機(jī)構(gòu)對管轄水域船舶尾氣排放動態(tài)的掌控,對我國水域船舶大氣污染物的排放管控起到了積極意義.但目前該計算方法還處于測試階段,計算所需數(shù)據(jù)源的精確性和實時性上無法保障,計算結(jié)果有待于船舶尾氣污染物檢測儀器監(jiān)測的數(shù)據(jù)進(jìn)行驗證,并根據(jù)驗證結(jié)果對模型進(jìn)行進(jìn)一步優(yōu)化.