流數據應用技術方案針對流數據應用場景,針對流數據的海量、多源、持續等特征,進行持續地獲取相關的動態位置,以及持續地分析、處理和挖掘。
本章沿用基於單機SuperMap iServer環境,介紹流數據處理的整個過程。所使用到的工具和前端展示代碼請提前進行下載
iServer軟件下載地址(本文使用10.0.1 win64位):
http://support.supermap.com.cn/DownloadCenter/DownloadPage.aspx?id=1203
模擬流數據下載地址:
https://share.weiyun.com/50VnG4Z 密碼:vx2d03
一、總體流程
通過模擬器定時讀取CSV文件,將讀取的信息發送給SuperMap iServer流數據服務(Streaming Service)。該服務將分析處理結果向SuperMap iClient客戶端進行廣播,當SuperMap iClient客戶端訂閱流數據服務后,即可自動接收服務器推送的數據。
為了便於讀者在本地模擬流數據處理過程,我們提供了流數據發送模擬器(File2WebSocket.bat),通過模擬器直接從提供的數據中讀取全球航班實時位置數據(flights2w.csv)模擬流數據產生應用場景,該數據以“,”逗號分隔,其中包含航班旋轉角度、航班號、航班當前時間的經緯度信息。
78,UAL2831,-168.78334,52.16667
62,MHO220,-155.78334,19.93333
48,ANZ28,-175.56667,-28.65
40,UAL99,-167.63333,-10.75
80,KAL35,-178.34415,43.22642
49,UAL870,-172.14999,-11.08333
80,AAL176,-177.64999,43.31667
二、流數據處理流程
2.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.2 SuperMap iServer配置流數據處理服務
(1)確認SuperMap iServer已啟動並已開啟本地Spark分布式計算集群,並將本機加入集群,勾選“報告器是否啟用”與“是否分布式分析節點”
(2)使用瀏覽器訪問http://localhost:8090/iserver/manager,登陸SuperMap iServer管理頁面,點擊【首頁】 -> 【快速發布一個或一組服務】
填寫服務名為dataflow點擊下一步發布完成(這里名稱必須與后面流模型配置相符)
(3)點擊【服務】 -> 【概述】 -> 【配置流數據服務】。
(4)將“接收器”中“WebSocket接收器”,用鼠標拖到“節點編輯器”中。鼠標單擊“節點編輯器”中的“WebSocket接收器”。“接收數據格式”選擇“CSVFormatter”,“元數據”選擇“StreamingMetadata”,“WebScoket服務地址”填寫“ws://127.0.0.1:8181”
(5)點擊“元數據”上的“StreamingMetadata”標簽,在隨后顯示的頁面中,“epsg”填寫“4326”,“id字段名”填寫“id”,“接收數據類型”選擇“POINT”。由於原數據中有4個字段,所以“字段信息”添加4個FieldInfo。
(6)點擊“FieldInfo-0”標簽,根據航班數據內容,
78,UAL2831,-168.78334,52.16667
從“FieldInfo-0”到“FieldInfo-3”依次填寫以下內容,填寫完成后,點擊檢查並返回。
字段信息 | 字段名稱 | 字段來源 | 字段類型 |
---|---|---|---|
FieldInfo-0 | direction | 0 | INT32 |
FieldInfo-1 | id | 1 | TEXT |
FieldInfo-2 | x | 2 | DOUBLE |
FieldInfo-3 | y | 3 | DOUBLE |
(7)將鼠標放到“元數據”的“StreamingMetadata”標簽上,可以看到上一步的詳細配置信息,確認信息無誤后,點擊“檢查並返回”按鈕。
(8)將“接收器”中的“WebSocket發送器”用鼠標拖到“節點編輯器”中,鼠標單擊“節點編輯器”中的“WebSocket發送器”,“結果信息格式”選擇“GeoJsonFormatter”,“WebSocket服務地址”填寫如下內容。
ws://127.0.0.1:8800/iserver/services/dataflow/dataflow/broadcast?token=sTVZbj6ivkvrX9gcSbYlgpdaZpj97RenP49MIUDQl3bS1Jmjgz9ToaeFf0jaXKbPlE0rUnY3YbXPekG0sFwjkA..
其中Token是需要申請的,訪問http://localhost:8090/iserver/services/security/tokens,填寫完成后“點擊檢查並返回”
(9)拖拽“節點編輯器”中的“WebSocket接收器”右側的綠色方塊,將拖出的箭頭指向“WebSocket發送器”,命名為“flights2wDemo”,點擊“發布”即可發布流處理模型,發布完成后顯示流數據處理服務基本信息。
(10)打開模擬發送流數據窗口,可以看到數據在實時進行信息推送,訪問Apache Spark地址:http://localhost:4040/jobs/, 查看Apache Spark運行狀態是否正常。
(11)發布完流模型后,點擊【服務】->【服務管理】->【數據流服務】點擊dataflow“超鏈接”
點擊服務地址
點擊“subscribe”
點擊“訂閱”按鈕,就能看到模擬器推送過來的詳細數據內容。
注意:如沒有看到推送來的數據,請查看電腦是否有多塊虛擬網卡,例如:vmware或virtualbox,如果有請在網絡中禁用,然后在停止iServer與推送程序,重新打開與啟動iServer即可。
下一步我們將使用web客戶端進行展示。
三、Web客戶端展示
(1)將下載材料中的流數據可視化示例代碼文件dataflowLayer.html,使用文本編輯器打開,修改Token值,這里的Token值與配置的“WebSocket發送器”中WebSocket服務地址Token完全相同。
(2)將修改后的dataflowLayer.html與plane.png文件復制到%SuperMap iServer_HOME%\iClient\forJavaScript\examples\openlayers目錄下,使用瀏覽器訪問http://localhost:8090/iserver/iClient/forJavaScript/examples/openlayers/dataflowLayer.html,就可以實時監控飛機所在位置與角度
(轉發請注明出處:http://www.cnblogs.com/zhangyongli2011/ 如發現有錯,請留言,謝謝)