1. 程式人生 > >SuperMap流資料技術及應用實踐

SuperMap流資料技術及應用實踐

1. SuperMap流資料技術

       SuperMap流資料技術方案基於Spark生態體系的Spark Streaming 流處理技術框架,適合於處理流資料、歷史資料等相關場景,並保證處理的容錯性。SuperMap流資料方案將從流資料接入、流資料分析處理、流資料儲存、流資料輸出和流資料視覺化實現物聯網領域全流程的產品形態和技術支援。
在這裡插入圖片描述

1.1. 流資料接入

       SuperMap iServer流資料服務(Steaming Service)可以非常快速的接入常見的流資料來源,包括各類移動終端、監控感測器、GPS裝置等。iServer Streaming Service的接收器(Receivers)負責流資料的接收,系統提供針對不同資料格式的解析能力(Reader)和多種傳輸協議(Transport)的處理能力,同時可以將Reader和Transport進行組裝實現可變換的接收器。
       iServer Streaming Service的接收器支援CSV、TXT、JSON、GeoJSON等常用資料格式,支援Socket、HTTP、JMS、Kafka等主流資料傳輸協議。同時iServer預設預配置了4種輸入聯結器提供各類資料接入,包括訊息訂閱、檔案匯入、HTTP輪詢和WebSocket接入。
在這裡插入圖片描述

1.2. 流資料分析處理

       針對海量流資料的處理和分析,iServer Streaming Service提供了非常強大和豐富的實時分析處理工具,包括屬性過濾器、空間過濾器(地理圍欄)和轉換器函式。
       屬性過濾器
       屬性過濾器用來基於屬性表示式過濾地理事件。iServer提供了數值欄位屬性過濾和文字欄位屬性過濾。數值欄位屬性過濾支援常用的數值比較運算大於、小於、等於,如“[speed]>120”,也支援複雜組合使用,如“([x] >= -180 && [x] <= 180) && ([y] >= -90 && [y] <= 90) ”,以及支援類SQL的關鍵字,如“[mmsi] in (355460000, 412416015, ……) ”。文字欄位屬性過濾支援正則表示式,如“ [content] matches CCA[0-9]{4}”。
       空間過濾器
       空間過濾器可以基於空間關係過濾實時地理行為。iServer提供了包含、相離等空間關係過濾支援,如當前點是否在地理圍欄內
在這裡插入圖片描述


       轉換器函式
       變換器函式用來進行流資料日常處理。iServer提供欄位相關轉換器和地理位置轉換器兩種型別。其中欄位轉換器包括數值計算如“[ longitude ] / 600000”、欄位對映如“[x] = [ latitude ] / 600000”和欄位新增如“[ receivertime ] = currentTime()”能力支援。
       iServer支援地理圍欄,主要對實時流資料動態判斷哪些目標落入空間範圍(圍欄)內,支援計算的進入、保持、退出等細化的狀態。
在這裡插入圖片描述

       地理位置轉換支援動態目標與地理圍欄的實時地理狀態標記。iServer支援實時動態目標初始位置狀態(如下圖T0),與地理圍欄相離已記錄的位置狀態(如下圖 T1),即將進入地理圍欄位置狀態(如下圖 T2),已經進入地理圍欄位置狀態(如下圖 T3),即將離開地理圍欄位置狀態(如下圖 T4)。
在這裡插入圖片描述
       流資料實時處理的效能主要受輸入源及計算節點數目的影響,如下圖。我們採用全球民航客機進出全球3,455個機場面的情況進行效能測試。叢集和效能情況如下(效能單位 e/s ,事件/秒):在相同的測試環境下,通過對來源於Socket、Kafka、File等的三種資料,實時計算民航客機進出圍欄的情況。經過對比發現磁碟檔案的處理是最快的,其少了網路的傳輸,以及不同節點間的資料交換。對於Socket、Kafka網路通訊協議可以通過增加傳輸通道來提升效能。
在這裡插入圖片描述
       另外,通過多個通道,測試不同計算節點下的效能表現。在處理相同的輸入資料時,隨著節點的增加,效能線性提升;在相同節點時,資料增加,效能不會呈指數下降。
在這裡插入圖片描述

1.3. 流資料儲存

       SuperMap iServer流資料服務基於iServer的Datastore實現流資料的高效儲存,主要依賴於DataStore的Elasticsearch分散式流資料庫,實現實時搜尋、穩定、可靠、快速的功能需求。使用者可以將流資料處理後的資料或者歷史資料儲存在DataStore中,通過流資料庫的高效實時搜尋能力,充分挖掘歷史資料的價值,如針對歷史資料實現軌跡回放、時間軸播放等。
在這裡插入圖片描述

1.4. 流資料輸出

       SuperMap iServer流資料服務可以在SuperMap各個端產品中動態跟蹤相關目標,也可以對目標的位置變化行為進行告警或者通知。iServer通過輸出聯結器將實時流資料輸出,包括輸出到iServer DataStore實現歷史資料儲存;以訊息方式實現輸出;通過DataFlow Service以WebSocket的方式向客戶端傳送流資料,為SuperMap iClient實現流資料視覺化提供技術基礎。
在這裡插入圖片描述

1.5. 流資料視覺化

       SuperMap iServer流資料服務可以將實時流資料輸出接入到SuperMap各個端產品實現實時動態顯示,使用者可以直觀的檢視某一時刻當前目標資料的執行位置狀態。
在這裡插入圖片描述
       使用者也可以將更多的實時目標資料進行動態網格聚合顯示,更適合海量多目標資料展示,通過不同的各位顏色飽和度以及範圍包含數字直觀表達流資料狀態。
在這裡插入圖片描述
       同時也可以通過空間聚集狀態實現密度分佈和熱度分佈等視覺化表達。
在這裡插入圖片描述

2. SuperMap流資料應用實踐

       本節沿用基於單機SuperMap iServer環境,為讀者介紹流資料處理的整個過程。所使用到的工具和前端展示程式碼請提前至超圖軟體官網進行下載 。
       如下圖所示,通過模擬器定時讀取CSV檔案,將讀取的資訊傳送給SuperMap iServer流資料服務(Streaming Service)。該服務將分析處理結果向SuperMap iClient客戶端進行廣播,當SuperMap iClient客戶端訂閱流資料服務後,即可自動接收伺服器推送的資料。
在這裡插入圖片描述
       為了便於讀者在本地模擬流資料處理過程,我們提供了流資料傳送模擬器 (File2WebSocket.bat),通過模擬器直接從提供的資料中讀取全球航班實時位置資料 (flights2w.csv)模擬流資料產生應用場景,該資料以“,”逗號分隔,其中包含航班旋轉角度、航班號、航班當前時間的經緯度資訊。
在這裡插入圖片描述

2.1. 流資料處理流程

2.1.1. 模擬傳送流資料

(1)讀者可以使用記事本開啟File2WebSocket.bat檔案
WebSocketServer.exe 8181 127.0.0.1 ./flights2w.csv 1000 2000
引數解釋:
       8181:WebSocket服務埠。
       127.0.0.1:IP地址,因為是單機環境,填寫本機地址即可。
       ./flights2w.csv:傳送檔案路徑。
       1000:間隔時間(單位:毫秒)。
       2000:間隔時間內傳送多少條。
(2)編輯完成後,雙擊執行File2WebSocket.bat(如下圖),可以看到傳送的服務地址為:ws://127.0.0.1:8181
在這裡插入圖片描述

2.1.2. SuperMap iServer配置流資料處理服務

(1)確認SuperMap iServer已啟動並已配置完分散式分析服務。
(2)如下圖,使用瀏覽器訪問http://localhost:8090/iserver/manager,登陸SuperMap iServer管理頁面,點選【服務】 -> 【概述】 -> 【配置流資料服務】。
在這裡插入圖片描述
(3)將“接收器”中“WebSocket接收器”,用滑鼠拖到“節點編輯器”中。滑鼠單擊“節點編輯器”中的“WebSocket接收器”。“接收資料格式”選擇“CSVFormatter”,“元資料”選擇“StreamingMetadata”,“WebScoket服務地址”填寫“ws://127.0.0.1:8181”。
在這裡插入圖片描述
(4)點選 “元資料”上的“StreamingMetadata”標籤,在隨後顯示的頁面中,“epsg”填寫“4326”,“id欄位名”填寫“id”,“接收資料型別”選擇“POINT”。由於原資料中有4個欄位,所以“欄位資訊”新增4個FieldInfo。
在這裡插入圖片描述
(5)點選“FieldInfo-0”標籤,根據航班資料內容,
78,UAL2831,-168.78334,52.16667
從“FieldInfo-0”到“FieldInfo-3”依次填寫以下內容,填寫完成後,點選檢查並返回。
在這裡插入圖片描述
在這裡插入圖片描述
(6)將滑鼠放到“元資料”的“StreamingMetadata”標籤上,可以看到上一步的詳細配置資訊,確認資訊無誤後,點選“檢查並返回”按鈕。
在這裡插入圖片描述
(7)將“接收器”中的“WebSocket傳送器”用滑鼠拖到“節點編輯器”中(圖9-42),滑鼠單擊“節點編輯器”中的“WebSocket傳送器”,“結果資訊格式”選擇“GeoJsonFormatter”,“WebSocket服務地址”填寫如下內容。
ws://127.0.0.1:8800/iserver/services/dataflow/dataflow/broadcast?token= VBqfynfk1xoY87wXauNtHG9_qZUkj7SfBwEEwHV2AJVxlHlyMMprHTeK-DuSCxzYMEPGMbr-yz6oANMe-hjKog…
其中Token是需要申請的,填寫完成後“點選檢查並返回”。
在這裡插入圖片描述
(8)拖拽“節點編輯器”中的“WebSocket接收器”右側的綠色方塊,將拖出的箭頭指向“WebSocket傳送器”,命名為“flights2wDemo”,點選“釋出”即可釋出流處理模型,釋出完成後顯示流資料處理服務基本資訊。
在這裡插入圖片描述
(9)開啟模擬傳送流資料視窗,可以看到資料在實時進行資訊推送,訪問Apache Spark地址:http://localhost:4040/jobs/,檢視Apache Spark執行狀態是否正常。
在這裡插入圖片描述
(10)返回SuperMap iServer【首頁】 -> 點選【快速釋出一個或一組服務】 -> 資料來源選擇【資料流】 -> 服務名填寫“dataflow”,此處名稱與“WebSocket傳送器”中WebSocket服務地址定義的名稱一致。
在這裡插入圖片描述
在這裡插入圖片描述
(11)釋出完流資料處理服務後,點擊發布完成後介面上的“超連結”地址“dataflow/dataflow” -> 點選“subscribe” -> 點選“訂閱”按鈕,就能看到模擬器推送過來的詳細資料內容。下一步我們將使用web客戶端進行展示。
在這裡插入圖片描述
在這裡插入圖片描述

2.2. 流資料視覺化展示

(1)將下載材料中的流資料視覺化示例程式碼檔案dataflowLayer.html ,使用文字編輯器開啟,修改Token值,這裡的Token值與配置的“WebSocket傳送器”中WebSocket服務地址Token完全相同。
var token = “VBqfynfk1xoY87wXauNtHG9_qZUkj7SfBwEEwHV2AJVxlHlyMMprHTeK-DuSCxzYMEPGMbr-yz6oANMe-hjKog…”;
在這裡插入圖片描述
(2)將修改後的dataflowLayer.html與plane.png 兩個檔案複製到%SuperMap iServer_HOME%\iClient\forJavaScript\examples\openlayers目錄下,使用瀏覽器開啟dataflowLayer.html檔案,就可以實時監控飛機所在位置與角度。
在這裡插入圖片描述
在這裡插入圖片描述