Location via proxy:   [ UP ]  
[Report a bug]   [Manage cookies]                
SlideShare a Scribd company logo
IoTなどの大量データを
Stream Analyticsで
リアルタイムデータ分析してみよう
Hidemasa Togashi
自 己 紹 介
Introduction
富樫 英雅 (@hid_tgc)
Infrastructure Engineer
at gloops
2012∼
2014∼
Infrastructure Manager
at 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
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
こ の 講 演 の き っ か け は . . .
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
本 題
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
市場
15Trillion USD on 2034
≒16.8GDP 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にかなり力を注いできている
デバイスが増える データも増える
これをどうやって集計するか…
Batch Interactive
/MPP
R e a l t i m e
Batch Interactive
/MPP
R e a l t i m e
Batch
Hadoop
B a t c h
23%
24%
28%
24%
バッチ処理は膨大なデータを並列的に処理することで統計処理などデータ処理を行うことがメイン。
Batch Interactive
/MPP
R e a l t i m e
Interactive / MPP
MPP: 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%
低レイテンシーに処理することでイテレーション処理などを行うことがメイン。
Batch Interactive
/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
メ ジ ャ ー な プ ロ ト コ ル
ロ グ 送 信 と い え ば
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
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 Query
CloudServiceSelf-Managed
Stream Analytics
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 Storage
HDInsightや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
家 / 火 災 報 知 器
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
Device Control
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
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 が ど の よ う に 使 って い る か の 実 例 紹 介
GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
SELECT remote_ip, COUNT(*)
FROM access_log
WHERE uri = ‘<URI>’
GROUP BY remote_ip,
SLIDING_WINDOW(minute, 10)
HAVING COUNT(*) > 10;
Subscribe
EventProcessorHost
SETEX
Expire: 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

More Related Content

GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう