goazure 2015:iotなどの大量データをstream...
TRANSCRIPT
IoTなどの大量データを Stream Analyticsで
リアルタイムデータ分析してみよう
Hidemasa Togashi
自 己 紹 介
Introduction
富樫 英雅 (@hid_tgc)
Infrastructure Engineer at gloops 2012~
2014~ Infrastructure Managerat Capy Inc.
滞在国
イスラエル日本
アメリカ
C a p y I n c .
99%
http://www.geek.com/apps/googles-street-view-can-beat-captchas-99-of-the-time-1591547/
Google`s Street View can beat CAPTCHAs 99% of the the time
こ の 講 演 の き っ か け は . . .
本 題
C o n t e n t s
IoTとは?トレンドの紹介 1
Azure Stream Analyticsを使った事例紹介 3
Azure Stream Analyticsの紹介 2
Capyがどのように使っているかの実例紹介 4
実際に使った際の考察 5
I o Tとは?トレンドの紹介
OI oT
Internet Of ThingsI TO
トレンド
ref: http://iot-analytics.com/wp/wp-content/uploads/2014/10/IoT-Economic-value-forecast-1.png
市場
15 Trillion USD on 2034
≒16.8 GDP of USA on 2013
26,000,000,000 objects linked together in the IoT by 2020.
http://www.siemens.com/innovation/en/home/pictures-of-the-future/digitalization-and-software/internet-of-things-facts-and-forecasts.html
.Net micro framework Windows Developer Program for IoT
MSもIoTにかなり力を注いできている
デバイスが増える デ〡タも増えるこれをどうやって集計するか…
B a t c h Interact ive/MPP
R e a l t i m e
B a t c h Interact ive/MPP
R e a l t i m e
Batch
Hadoop
B a t c h
23%
24% 28%
24%
バッチ処理は膨大なデータを並列的に処理することで統計処理などデータ処理を行うことがメイン。
B a t c h Interact ive/MPP
R e a l t i m e
Interactive / MPPMPP: Massively Parallel Processing
Redshift Spark Big Query
I n t e r a c t i v e / M P P
低レイテンシーに処理することでイテレーション処理などを行うことがメイン。
25%
25% 25%
25%
I n t e r a c t i v e / M P P
22%
22%33%
22%
低レイテンシーに処理することでイテレーション処理などを行うことがメイン。
I n t e r a c t i v e / M P P
25%
25% 25%
25%
低レイテンシーに処理することでイテレーション処理などを行うことがメイン。
I n t e r a c t i v e / M P P
21%
29% 29%
21%
低レイテンシーに処理することでイテレーション処理などを行うことがメイン。
B a t c h Interact ive/MPP
R e a l t i m e
R e a l t i m e
これはイベントドリブンのようにイベント毎に処理を行うことを目的としています。
R e a l t i m e
100%
14%
29%
29%
29%20%
30% 30%
20%21%
29% 29%
21%19%
24%
33%
24%25%
21% 32%
21%27%
20% 30%
23%28%
21% 26%
26%30%
20% 24%
26%28%
21% 26%
25%26%
20%28%
26%25%
22% 28%
25%25%
24% 28%
24%23%
25% 29%
23%
用途 例
Batch 膨大なデータ処理を行うアプリケーション ETL, リコメンデーション
Interactive低レイテンシーが必要なアプリケーション 繰り返しの計算が必要なアプリケーション 機械学習
Realtime膨大な入力に対して今のデータが重要なアプリケーション
Batch処理の入力データ整形
異常検知 イベント処理 トレンド検知
膨大な入力
膨大な入力
どうやって送信する?
どうやって受信する?
どうやって処理する?
膨大な入力
どうやって送信する?
どうやって受信する?
どうやって処理する?
処 理 受信
処 理 受信
Kinesis Application
受信処 理 受信
受信処 理 受信
Service Bus Event Hubs
L a n g u a g e s
Product Protocol API / SDK
Apache Kafka 独自Protocol Producer API
Amazon Kinesis HTTPS AWS SDK
Azure Event Hubs HTTPS AMQPS
REST API Azure SDK
プロトコル
膨大な入力
どうやって送信する?
どうやって受信する?
どうやって処理する?
膨大な入力
どうやって送信する?
どうやって受信する?
どうやって処理する?
デバイスからイベント送信
デバイスから
イベント送信セキュアに
HTTPS MQTT CoAP AMQP
メジャーなプロトコル
ロ グ 送 信 と い え ば
https://github.com/htgc/fluent-plugin-azureeventhubs
https://github.com/htgc/fluent-plugin-kafka
膨大な入力
どうやって送信する?
どうやって受信する?
どうやって処理する?
膨大な入力
どうやって送信する?
どうやって受信する?
どうやって処理する?
Vs.独自コード SQL Like Query
独自コード SQL Like Query
独自コード SQL Like Query
処理の柔軟性
独自コード SQL Like Query
開発の容易性
独自コード SQL Like QueryC
loud
Ser
vice
Sel
f-Man
aged
St ream Ana ly t ics
SQL Like なクエリでストリーム処理ができるクラウドサービス
C o n t e n t s
IoTとは?トレンドの紹介 1
Azure Stream Analyticsを使った事例紹介 3
Azure Stream Analyticsの紹介 2
Capyがどのように使っているかの実例紹介 4
実際に使った際の考察 5
A z u r e S t r e a m A n a l y t i c sの紹介
Blob Storage更新頻度の低いリファレンスデータなど
Event Hubsデバイスなどから都度送信されてくるイベント
データなど
I n p u t
Blob StorageHDInsightやAzure MLなどの入力用
Event Hubs別イベント処理の入力用
O u t p u t
SQL Databaseアプリケーションの参照用
Type Description
bigint 64bit 符号付き整数
float 64bit 符号付き浮動小数点数
nvarchar(max) string
datetime datetime型
D a t a Ty p e s
SELECT FROM WHERE GROUP BY HAVING CASE
JOIN UNION WITH
Q u e r y
Sliding Window
Hopping Window
Tumbling Window
W i n d o w i n g
Sliding Window
Hopping Window
Tumbling Window
W i n d o w i n g
指定した時間(windowsize)で間隔を区切り、 区切られた時間内のイベントを対象として処理する。
TUMBLINGWINDOW ( timeunit , windowsize ) TUMBLINGWINDOW ( Duration( timeunit , windowsize ) )
Tumbling Window
1
2
SELECT System.TimeStamp AS OutTime, TollId, COUNT(*) FROM Input TIMESTAMP BY EntryTime GROUP BY TollId, TumblingWindow(minute,5)
Tumbling Window
Sliding Window
Hopping Window
Tumbling Window
W i n d o w i n g
指定した時間(hopsize)毎に、区切られた時間 (windowsize)内のイベントを対象として処理する。
HOPPINGWINDOW ( timeunit , windowsize , hopsize ) HOPPINGWINDOW ( Duration( timeunit , windowsize ) , Hop (timeunit , windowsize )
Hopping Window
1
2
SELECT System.TimeStamp AS OutTime, TollId, COUNT(*) FROM Input TIMESTAMP BY EntryTime GROUP BY TollId, HoppingWindow(minute,10 , 5)
Hopping Window
Sliding Window
Hopping Window
Tumbling Window
W i n d o w i n g
イベント事に指定した時間(windowsize)内の イベントを対象として処理する。
SLIDINGWINDOW ( timeunit , windowsize ) SLIDINGWINDOW ( Duration( timeunit , windowsize ) )
Sliding Window
1
2
SELECT DateAdd(minute,-3,System.TimeStamp) AS WinStartTime, System.TimeStamp AS WinEndTime, TollId, COUNT(*) FROM Input TIMESTAMP BY EntryTime GROUP BY TollId, SlidingWindow(minute, 3) HAVING COUNT(*) > 3
Sliding Window
Time unit Abbreviations
day dd, d
hour hh
minute mi, n
second ss, s
millisecond ms
microsecond mcs
nanosecond ns
C o n t e n t s
IoTとは?トレンドの紹介 1
Azure Stream Analyticsを使った事例紹介 3
Azure Stream Analyticsの紹介 2
Capyがどのように使っているかの実例紹介 4
実際に使った際の考察 5
A z u r e S t r e a m A n a l y t i c sを使った事例紹介
Use Case
Home Security
家 /火災報知器
Device Control
C o n t e n t s
IoTとは?トレンドの紹介 1
Azure Stream Analyticsを使った事例紹介 3
Azure Stream Analyticsの紹介 2
Capyがどのように使っているかの実例紹介 4
実際に使った際の考察 5
C a p yがどのように使っているかの実例紹介
SELECT remote_ip, COUNT(*) FROM access_log WHERE uri = ‘<URI>’ GROUP BY remote_ip, SLIDING_WINDOW(minute, 10) HAVING COUNT(*) > 10;
Subscribe EventProcessorHost
SETEXExpire: PenaltyTime
C o n t e n t s
IoTとは?トレンドの紹介 1
Azure Stream Analyticsを使った事例紹介 3
Azure Stream Analyticsの紹介 2
Capyがどのように使っているかの実例紹介 4
実際に使った際の考察 5
実際に使った際の考察
はまった点
Event HubsからのイベントをSubscribeできない
当初、他のシステムと同様PythonでSubscribe→RedisへSETを行おうと考えていたが、Qpid-Protonを使用してもEvent Hubsへ接続が行えず断念。(原因は恐らくConsumerGroupとPartitionの指定の不備)
しかしAMQPでのDirect Connectの場合はパーティション毎にコネクションを張る必要があり面倒なので、EventProcessorHost classを用いて接続した方が全然楽。
はまった点
Stream AnalyticsからのJSONデータがデコードできない
出力をJSONに指定するとリスト型で出力されるが、何故かリストが閉じていないためJSONのデコードに失敗する。
今のところは原始的ですが
var listObject = DynamicJSON.Parse(string.Format(“{0}]”, data));
のように強制的にリストを閉じてデコードしてます。
Event HubsからのイベントをSubscribeできない
当初、他のシステムと同様PythonでSubscribe→RedisへSETを行おうと考えていたが、Qpid-Protonを使用してもEvent Hubsへ接続が行えず断念。(原因は恐らくConsumerGroupとPartitionの指定の不備)
しかしAMQPでのDirect Connectの場合はパーティション毎にコネクションを張る必要があり面倒なので、EventProcessorHost classを用いて接続した方が全然楽。
はまった点
はまった点Stream AnalyticsからのJSONデータがデコードできない
出力をJSONに指定するとリスト型で出力されるが、何故かリストが閉じていないためJSONのデコードに失敗する。
今のところは原始的ですが
var listObject = DynamicJSON.Parse(string.Format(“{0}]”, data));
のように強制的にリストを閉じてデコードしてます。
課題
Stream Analyticsのもろもろの設定を変更する際には一度停止が必要。
e.g.
• Inputs
• Output
• Query
• Scale
Stream Analyticsのスケール要否の判断基準がメトリクスから読み取りにくい。
※見ることの出来るデータは以下のとおり
• Input Events
• Output Events
• Data Conversion Errors
• Out of order Events
• Errors
Event Hubsからのイベント受信の使い勝手がEventProcessorHost以外では悪い。
そのためLinux系でシステムを組みながらEvent HubsでLambda Architectureなどを組みづらい。
現状はまだプレビュー版のため正式リリース時にはこの課題も解消しているかもしれません。
まとめ
• IoTのトレンドは今後確実に伸びていく
• 大量のデバイスから生成されるデータ集計にはバッチ処理に加えてリアルタイム性も必要となってくる
• Event Hubsへのデータの送信からStream Analyticsでのクエリ実行までは物凄く簡単
• Event Hubs + Stream AnalyticsはIoTのみでなくM2Mのリアルタムログ分析基盤としてはかなり強力なツールになり得る
Thank you