張 帆 黃 茜 文元橋 黃 亮 周春輝 張哲源
(武漢理工大學航運學院1) 武漢 430063) (內河航運技術湖北省重點實驗室2) 武漢 430063) (國家水運安全工程技術研究中心3) 武漢 430063) (武漢理工大學智能交通系統研究中心4) 武漢 430063)
海上交通的日益繁忙導致船舶尾氣排放量迅速上升.我國交通運輸部于2015年末設立了珠三角、長三角、環渤海(京津冀)水域船舶大氣污染物排放控制區,控制船舶尾氣中硫氧化物、氮氧化物和顆粒物的排放[1].為了掌握船舶尾氣中各種物質的排放含量,趙海鷗等[2]利用多種有害氣體傳感器對船舶柴油機尾氣排放數據進行實時采集,并通過無線通信技術對將數據傳輸回地面,但當前針對船舶尾氣中硫氧化物、氮氧化物和顆粒物進行檢測的傳感器發展尚不成熟,且價格高昂,并不適合海港大范圍的部署.目前絕大部分船舶都配備了AIS設備[3],且船舶AIS數據蘊含信息量大,包含船舶水上移動通信業務標識碼(maritime mobile service identify,MMSI)、航向、對地航速、船位等一系列船舶航行過程中的狀態數據和船舶主機功率、始發港、目的港、裝載貨物信息等一系列船舶及貨物屬性數據.近年來國內外學者[4-11]多利用船舶AIS數據結合船舶尾氣排放計算模型對各自研究水域的船舶尾氣排放清單進行離線計算.但傳統的船舶尾氣排放計算過程復雜,且沒有綜合考慮計算所需要的環境數據、船舶屬性等基礎數據,計算結果不能客觀反映船舶尾氣排放值.同時想通過傳統的尾氣排放計算模型滿足實時的在線監測,需要監測范圍所有船舶的AIS數據,這樣的計算規模是傳統單機計算程序無法承受的.
為了滿足監管部門對管轄水域船舶尾氣排放實時監管的需求,本文設計了一種基于Spark計算框架的船舶尾氣實時計算方法,該方法可以針對計算數據量的大小對排放計算能力進行實時調控,使監管部門能夠實時掌握船舶尾氣排放動態.相比于Storm、Flink等其他主流的流式數據計算框架,Spark不僅具備強大的實時計算能力,還具有離線數據批處理和機器學習能力,將更加利于今后隨著處理數據量的增大對計算功能的擴展和優化.
單船尾氣排放模型可以計算出船舶航行中每個軌跡段所產生的各類尾氣排放值,然后將計算出來的尾氣排放值映射到網格化處理[12]的區域地圖上,最后疊加在一起即完成某區域內所有船舶的尾氣排放計算,見圖1.

圖1 船舶區域排放計算示意圖
基于AIS的單船船舶廢氣排放量計算式為[13]
Pa×LFa×Ta×EFi,a+Pb×LFb×Tb×EFi,b
(1)
式中:E為船舶尾氣排放量.g;P為船舶動力設備功率,kW;i為第i種船舶尾氣排放物;j為船舶動力設備類型;下標m為主機、a為輔機、b為鍋爐;LF為船舶負荷因子;T為船舶在設備j工況下的運行時間,h;EFi,j為第i種船舶尾氣物在第j種動力設備工況下的排放因子,g/(kW·h).
式(1)利用船舶AIS動態軌跡可以推算船舶各個動力設備的運行時間,并基于船舶MMSI標識從船級社數據、勞式數據庫等海事基礎數據中關聯查詢船舶動力設備額定功率P、設計航速等關鍵參數,進而能夠估算船舶動力設備的負荷情況,其中負荷因子采用式(2)進行計算,完成上述參數計算后從而實現單船尾氣排放量估算.
LF=(Vs/Vmax)3
(2)
式中:Vs為船舶航行時的實際速度,kn,數據來源于船舶AIS信息,對于船舶航行的實際速度,由于AIS信息在時間尺度上不均勻,因此,在進行計算時需對不均勻的速度信息進行插值處理;Vmax為船舶航行時的最大速度,kn,來源于勞氏海事數據庫等海事數據庫.
基于單船尾氣排放計算模型,可實現區域性船舶尾氣排放量的計算[14],見圖2.

圖2 區域船舶排放計算流程圖
在船舶尾氣排放計算過程中需要計算緩存數據,并且需要調用環境數據、船舶屬性、排放計算因子等多種類型數據,而排放計算引擎Spark自身的廣播變量屬性無法滿足動態共享數據的設計需求,普通的外部數據庫又無法達到Spark高速內存計算的速度,所以平臺選用讀寫性能優異的Redis內存數據庫[15]作為尾氣計算所設計的高速緩存,并將Redis連接池作為Spark廣播變量提供各個計算節點調用,進而提供更高效的數據使用效率.
與處理傳統的歷史AIS離線數據不同,實時計算平臺無法預先對所有數據進行組織與排序,所有流程必須在線完成.在Spark Streaming 中,處理數據的單位是一批而不是單條,而數據采集卻是逐條進行的,因此,Spark Streaming 需要設置間隔使得數據匯總到一定的量后再一并操作,這個間隔就是批處理間隔.批處理間隔是Spark Streaming 的核心概念和關鍵參數,它決定了Spark Streaming 提交作業的頻率和數據處理的延遲,同時也影響著數據處理的吞吐量和性能.Spark Streaming就是通過依次、快速的批處理指定時間間隔的數據塊來實現秒級的準實時計算.圖3數據流中的每一個數據塊里都包含了區域船舶在該時間區間內的所有AIS數據,因為船舶AIS數據中的MMSI碼是唯一的,利用Spark對這些數據進行相應處理后即可以根據MMSI碼提取出各條船舶的軌跡段.

圖3 AIS船舶軌跡提取流程
在具體實現中,Spark Streaming中將實時數據流中的每一個相同時間間隔數據塊讀取成彈性分布式數據集(resilient distributed datasets,RDD)對象.圖4a)為多條AIS數據.為了能對AIS數據中的MMSI信息進行識別以區分不同的船舶,須將RDD轉換為圖4b)中Key-Value形式Pair RDD對象,把MMSI信息最為每條數據的Key值,其余信息作為Value.之后對轉換得到的Pair RDD對象進行group By Key操作,此操作會將具有相同MMSI的AIS數據聚合在一起,最后對聚合得到的每一個AIS軌跡點集合按時間信息進行排序,就將離散的軌跡點集合成一條條AIS軌跡段,見圖4c).

a)RDD b) PairRDD c)List
計算得到的各條船AIS軌跡數據并不能直接應用于單船尾氣排放計算模型,因為會出現圖5中的情況.當前計算中的數據塊與前面計算過的某一數據塊中都有××輪的AIS軌跡段,如果對這兩個軌跡段都單獨進行單船尾氣排放計算,則前一AIS軌跡段中最后一個軌跡點Pe與當前軌跡段中第一個Ps之間的船舶軌跡沒有參與單船排放計算,這種排放計算方式將產生較大的誤差,所以設計將Pe添加到Ps點前參加當次的單船排放計算,通過這種方式實現不同數據塊中的同船軌跡段的前后關聯,經過軌跡前后關聯后的軌跡段即可應用于單船連續軌跡的尾氣排放計算.

圖5 軌跡關聯流程
為實現同船軌跡的前后關聯,在計算過程中,Spark集群將每條AIS軌跡段的最后一個軌跡點信息存入到Redis數據庫中,當計算后面的數據塊時,Spark會去數據庫中尋找對應船舶的軌跡點,如果存在就添加到軌跡段首位參與計算,見圖6.

圖6 軌跡前后關聯示意圖
1) 單船尾氣排放計算 本文使用第1節中介紹的船舶尾氣排放測度模型對單船尾氣排放進行計算.計算過程見圖7,針對每條船舶的AIS軌跡,依次選取軌跡中相鄰兩個AIS軌跡點數據,將其帶入尾氣排放計算模型,得到船舶在每兩個軌跡點間所產生的尾氣排放量,進而得到單船航行排放量.

圖7 單船尾氣排放計算流程
2) 排放軌跡插值 通過傳統的AIS軌跡單船尾氣排放算法計算出的排放值是分攤在軌跡段每兩個相鄰軌跡點之間,見圖8a).而AIS軌跡點在網格地圖中的分布是離散的、不連續的,因此,無法將軌跡段上的排放值連續地分配到各個網格上.本文針對該問題對排放軌跡進行插值,插值方法選取王超等[16]提出的考慮航向、航速的插值方法,且選定每1秒進行一次軌跡點插值,最終按各個網格點內插值后軌跡點的數量對兩軌跡點間的排放量進行分配,見圖8b),進而得到單船尾氣排放量網格地圖,見圖8c).


圖8 排放軌跡插值示意圖
3) 區域尾氣排放計算 在Spark集群中經過排放計算模型運算并插值處理后就得到了單船排放量網格數據,數據形式為Pair RDD,其中Key值為網格索引,Value為各類大氣污染物排放量,最后利用Spark提供的reduce By Key方法將具有相同網格索引的各類排放物總量疊加、合并在一起,形成區域排放量網格數據,見圖9.

圖9 區域尾氣排放計算流程示意圖
實驗選用Inter Core I5處理器單核心、1GB內存的單節點Spark對不同的數據量的AIS進行排放計算,經測試,該配置的Spark單節點每秒鐘可以計算150條數據,總計算延時為879 ms,小于1 s,見圖10.

圖10 單節點Spark計算性能圖
為了測試基于Spark的排放計算方法對計算能力的橫向擴展效果,對擁有不同節點數的Spark集群進行了計算壓力測試,實驗證明隨著計算節點數的增加,算法每秒鐘的計算能力得到了有效的提高,見圖11.

圖11 Spark集群計算性能圖
將2014年深圳港的AIS歷史數據以及模擬風、浪、流環境數據放入云端服務器,并模擬真實的AIS數據和環境數據發送方式對云端數據集進行播發,進而提供實時數據源.將云端的數據源接入到基于Spark的排放計算程序后,程序可以實時計算出深圳港水域的排放數據.通過瀏覽器前端定時去服務端請求實時尾氣排放計算數據,實現排放數據的可視化顯示,圖12為深圳港水域1 h內的船舶主機、輔機CO2累計排放地圖.

圖12 深圳港船舶尾氣排放可視化效果圖
通過基于Spark的船舶尾氣排放模型設計和基于GIS的深圳港船舶尾氣排放平臺構建,實現了基于AIS數據的船舶尾氣排放實時監測,便于海事管理部門等監管機構對管轄水域船舶尾氣排放動態的掌控,對我國水域船舶大氣污染物的排放管控起到了積極意義.但目前該計算方法還處于測試階段,計算所需數據源的精確性和實時性上無法保障,計算結果有待于船舶尾氣污染物檢測儀器監測的數據進行驗證,并根據驗證結果對模型進行進一步優化.