建立 Azure 資料流分析 Stream Analytics
Stream Analytics 是一種事件處理引擎
Stream Analytics 是一種事件處理引擎,可協助您即時了解裝置、感應器、基礎結構、應用程式和資料的詳細情形。它將可支援包括物聯網 (IoT) 在內的多種商機,例如即時車隊管理,或是從行動電話或連線的汽車等裝置取得相關深入資訊。
http://azure.microsoft.com/zh-tw/services/stream-analytics/
基本上來說 Stream Analytics 可以接收非常大量的資料,並且經過分析計算後再將資料送往指定的目的地 ( DB 或是 文字檔 ) 。常見的案例就是產線的機台資料必須要不停間地將資料進行判斷,並即時地將資料送往另外一台伺服器存放。若是時間超過幾秒的話,對商業價值來說就是過時的資料沒有意義。 又或者是像捷運路線系統的有上百個感應裝置,必須要每分鐘或是每 10 秒就將資料回傳到系統上並且讓系統判斷和寫入。
以往這樣的做法非常考驗系統架構人員的功力,您必須要顧慮到系統的穩定性、擴充性以及最重要的即時性。而且某些需求可能沒有辦法讓您的系統資料寫入有 Lock 或是等待,因此我們要用一堆的 Service、多執行性、佇列、暫存、排序,這會提升讓我們在開發的難度和除錯的困難。
Stream Analytics 需要的項目
這個並不是完全全新的技術,其實跟 SQL Server 的 Stream Insight 要解決的事情是非常接近的,但 Stream Insight 要駕馭它說真的並不太容易,而且伺服器要架設一堆東西才能動。
現在 Azure 全部都 Service 化了,這實在是太感動了。
- Service Bus
- Service Bus 的 Event Hub
- Azure Blob ( Service Bus 用 )
- Stream Analytics
- Azure SQL ( 後續還可以再延伸 Machine Learnning )
- 當然前端的系統 或裝置
基本上 Stream Analytics 所提供的文件已經非常清楚了,建議各位可以參考以下的連結。這篇的內容也是以這篇流程為主
開始使用 Azure 資料流分析
http://azure.microsoft.com/zh-tw/documentation/articles/stream-analytics-get-started/
http://azure.microsoft.com/zh-tw/documentation/articles/stream-analytics-introduction/
建立 Service Bus 服務匯流排
當然我建議大家還是要從架構的角度來看 Service Bus,以下提供這兩個連結供大家參考會對日後的需求應用有更深的了解。
http://azure.microsoft.com/en-us/documentation/articles/service-bus-dotnet-how-to-use-relay/
我們立刻來建立
由於 Stream Analytics 目前這個時間點還在 Preview ,所以只有 美國中部和歐洲有提供服務,因此目前所有相關的 Azure 都會在同一個資料中心,以避免要跨資料中心。
由於範例程式是大量傳送資料,所以這裡是用 Message 傳訊
完成!
這裡的通訊資料點開後,稍後會用在 Stream Analytics 的範例程式。
建立 Azure Blob 儲存體
這個應該沒有什麼太大的問題
Stream Analytics 的範例程式 - 建立 Event Hub
範例程式碼
https://code.msdn.microsoft.com/windowsapps/Service-Bus-Event-Hub-286fd097
這個程式主要的功用就是在 Service Bus 中建立 Event Hub ,記住您的程式是不會直接碰到 Stream Analytics 的。
在 APP.Config 分別將 AzureStorageConnectionString 的資料換成以下的字串
DefaultEndpointsProtocol=https;AccountName=<accountName>;AccountKey=<yourAccountKey>;
然後 Microsoft.ServiceBus.ConnectionString 則是將 End Point 資料直接貼上就可以了。
修改好後就可以直接編譯,再用 Command Line 的 BINS 目錄底下執行語法
BasicEventHubSample easyeventhubs 200 16
200 是指要送 200 筆的資料進去
16 是指 Partition 的數量
可以看到資料已經送上去
回到 Azure Service Bus 的 Event Hub (事件中心) 就可以看到多了一個剛剛建立的 EasyFatEventHubs
接下來我們要設定讓 Stream Analytics 可以串接的項目,這裡是透過「共用存取原則」
建立 Azure DB
在 Azure SQL 建立好後
直接在 Visual Studio 上連結
將文章上建議的 SQL 語法貼上後執行
這裡是可以看到日後 Stream Analytics 要輸出的 Table
建立 Steam Analytics
前面的服務準備好了,而後面的資料庫也建置完成。接下來就是我們的重頭戲 Stream Analytics
建立好服務後,我們要做三件事。
- 設定資料來源 Input
- 設定資料的目的地 Output
- 設定資料如何判斷 Query
設定 Stream Analytics Input
這次的案例是資料流,所以選擇 Data Stream
我們的資料來源是透過 Event Hub
將前面設定好的名稱分別代入
Event Hub 的傳遞格式是以 JSON 為主,格式不用擔心 Stream Analytics 會自已對應。
完成
設定 Stream Analytics Output
有三種方式,這次我們的範例是選擇 SQL Database 。 可以看到有 Event Hub 可以選,也就是代表我們的程式可以用程式把資料接回來。
選擇好項目測試儲存即可
設定 Stream Analytics Query
最後就是我們要決定資料應該要怎麼處理,第一個做法是通通都不處理就直接進去 DB ,而這裡的 From 是指 Input 的來源。
可以看到我們的 Stream Analytics 會用 SQL 語法直接去抓 JSON 格式的內容來讓我們隨時調整。
記得別寫錯名稱,設定好後就可以 Save
回到 Config 或是 Dashboard 就可以看到服務可以被 Start 了。
請直接選 Job Start Time 就可以了
驗證
等待 Stream Analytics 的服務啟動完成後,再將 範例程式執行一次。
這時候我們就可以查詢 Table
正確無誤的話,200 筆資料就會全部寫入
回到 Monitor 畫面也可以看到資料有進來,是不是很方便
前後應該不用花 1 小時就可以將所有的服務架設好,並且可以執行。 (雖然我們用的是範例程式 )
建立第二個 Stream Analytics
雖然文章是用同一個 Stream Analytics 處理,而我這邊是建立了第二組 Stream Analytics 來分析「平均值」
Input 的設定都跟第一個一樣,因為我的來源都是同一組。
將資料重新分類計算平均值
設定 Output 到另外一個 Table
測試完成後啟動
再次提醒,第一個參數是 Service Bus 的 Event Hub (事件中心) 的名稱
可以看到 這次的系統有 400 筆資料,而且平均資料也都同步出現
從這裡可以看出來 Stream Analytics 可以讓我們在 Cloud 架構規劃上有更多的選擇和彈性。重點並不是要玩技術,而是讓我們更著重解決商業需求和問題上。