goazure 2015:iotなどの大量データをstream...

108
IoT などの大量データを Stream Analytics リアルタイムデータ分析してみよう Hidemasa Togashi

Upload: hidemasa-togashi

Post on 18-Jul-2015

3.354 views

Category:

Data & Analytics


3 download

TRANSCRIPT

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

IoTなどの大量データを Stream Analyticsで

リアルタイムデータ分析してみよう

Hidemasa Togashi

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

自 己 紹 介

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

Introduction

富樫 英雅 (@hid_tgc)

Infrastructure Engineer at gloops 2012~

2014~ Infrastructure Managerat Capy Inc.

滞在国

イスラエル日本

アメリカ

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

C a p y I n c .

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

99%

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

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

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

こ の 講 演 の き っ か け は . . .

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

本 題

Page 13: 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

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

I o Tとは?トレンドの紹介

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

OI oT

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

Internet Of ThingsI TO

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

トレンド

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

ref: http://iot-analytics.com/wp/wp-content/uploads/2014/10/IoT-Economic-value-forecast-1.png

市場

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

15 Trillion USD on 2034

≒16.8 GDP of USA on 2013

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

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

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

.Net micro framework Windows Developer Program for IoT

MSもIoTにかなり力を注いできている

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

デバイスが増える デ〡タも増えるこれをどうやって集計するか…

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

B a t c h Interact ive/MPP

R e a l t i m e

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

B a t c h Interact ive/MPP

R e a l t i m e

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

Batch

Hadoop

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

B a t c h

23%

24% 28%

24%

バッチ処理は膨大なデータを並列的に処理することで統計処理などデータ処理を行うことがメイン。

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

B a t c h Interact ive/MPP

R e a l t i m e

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

Interactive / MPPMPP: Massively Parallel Processing

Redshift Spark Big Query

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

I n t e r a c t i v e / M P P

低レイテンシーに処理することでイテレーション処理などを行うことがメイン。

25%

25% 25%

25%

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

I n t e r a c t i v e / M P P

22%

22%33%

22%

低レイテンシーに処理することでイテレーション処理などを行うことがメイン。

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

I n t e r a c t i v e / M P P

25%

25% 25%

25%

低レイテンシーに処理することでイテレーション処理などを行うことがメイン。

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

I n t e r a c t i v e / M P P

21%

29% 29%

21%

低レイテンシーに処理することでイテレーション処理などを行うことがメイン。

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

B a t c h Interact ive/MPP

R e a l t i m e

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

R e a l t i m e

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

これはイベントドリブンのようにイベント毎に処理を行うことを目的としています。

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%

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

用途 例

Batch 膨大なデータ処理を行うアプリケーション ETL, リコメンデーション

Interactive低レイテンシーが必要なアプリケーション 繰り返しの計算が必要なアプリケーション 機械学習

Realtime膨大な入力に対して今のデータが重要なアプリケーション

Batch処理の入力データ整形

異常検知 イベント処理 トレンド検知

膨大な入力

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

膨大な入力

どうやって送信する?

どうやって受信する?

どうやって処理する?

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

膨大な入力

どうやって送信する?

どうやって受信する?

どうやって処理する?

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

処 理 受信

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

処 理 受信

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

Kinesis Application

受信処 理 受信

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

受信処 理 受信

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

Service Bus Event Hubs

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

L a n g u a g e s

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

Product Protocol API / SDK

Apache Kafka 独自Protocol Producer API

Amazon Kinesis HTTPS AWS SDK

Azure Event Hubs HTTPS AMQPS

REST API Azure SDK

プロトコル

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

膨大な入力

どうやって送信する?

どうやって受信する?

どうやって処理する?

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

膨大な入力

どうやって送信する?

どうやって受信する?

どうやって処理する?

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

デバイスからイベント送信

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

デバイスから

イベント送信セキュアに

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

HTTPS MQTT CoAP AMQP

メジャーなプロトコル

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

ロ グ 送 信 と い え ば

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

https://github.com/htgc/fluent-plugin-azureeventhubs

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

https://github.com/htgc/fluent-plugin-kafka

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

膨大な入力

どうやって送信する?

どうやって受信する?

どうやって処理する?

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

膨大な入力

どうやって送信する?

どうやって受信する?

どうやって処理する?

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

Vs.独自コード SQL Like Query

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

独自コード SQL Like Query

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

独自コード SQL Like Query

処理の柔軟性

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

独自コード SQL Like Query

開発の容易性

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

独自コード SQL Like QueryC

loud

Ser

vice

Sel

f-Man

aged

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

St ream Ana ly t ics

SQL Like なクエリでストリーム処理ができるクラウドサービス

Page 63: 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

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

A z u r e S t r e a m A n a l y t i c sの紹介

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

Blob Storage更新頻度の低いリファレンスデータなど

Event Hubsデバイスなどから都度送信されてくるイベント

データなど

I n p u t

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

Blob StorageHDInsightやAzure MLなどの入力用

Event Hubs別イベント処理の入力用

O u t p u t

SQL Databaseアプリケーションの参照用

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

Type Description

bigint 64bit 符号付き整数

float 64bit 符号付き浮動小数点数

nvarchar(max) string

datetime datetime型

D a t a Ty p e s

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

SELECT FROM WHERE GROUP BY HAVING CASE

JOIN UNION WITH

Q u e r y

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

Sliding Window

Hopping Window

Tumbling Window

W i n d o w i n g

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

Sliding Window

Hopping Window

Tumbling Window

W i n d o w i n g

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

指定した時間(windowsize)で間隔を区切り、 区切られた時間内のイベントを対象として処理する。

TUMBLINGWINDOW ( timeunit , windowsize ) TUMBLINGWINDOW ( Duration( timeunit , windowsize ) )

Tumbling Window

1

2

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

SELECT System.TimeStamp AS OutTime, TollId, COUNT(*) FROM Input TIMESTAMP BY EntryTime GROUP BY TollId, TumblingWindow(minute,5)

Tumbling Window

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

Sliding Window

Hopping Window

Tumbling Window

W i n d o w i n g

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

指定した時間(hopsize)毎に、区切られた時間 (windowsize)内のイベントを対象として処理する。

HOPPINGWINDOW ( timeunit , windowsize , hopsize ) HOPPINGWINDOW ( Duration( timeunit , windowsize ) ,   Hop (timeunit , windowsize )

Hopping Window

1

2

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

SELECT System.TimeStamp AS OutTime, TollId, COUNT(*) FROM Input TIMESTAMP BY EntryTime GROUP BY TollId, HoppingWindow(minute,10 , 5)

Hopping Window

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

Sliding Window

Hopping Window

Tumbling Window

W i n d o w i n g

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

イベント事に指定した時間(windowsize)内の イベントを対象として処理する。

SLIDINGWINDOW ( timeunit , windowsize ) SLIDINGWINDOW ( Duration( timeunit , windowsize ) )

Sliding Window

1

2

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

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

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

Time unit Abbreviations

day dd, d

hour hh

minute mi, n

second ss, s

millisecond ms

microsecond mcs

nanosecond ns

Page 80: 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

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

A z u r e S t r e a m A n a l y t i c sを使った事例紹介

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

Use Case

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

Home Security

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

家 /火災報知器

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

Device Control

Page 88: GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
Page 89: GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
Page 90: GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
Page 91: 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

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

C a p yがどのように使っているかの実例紹介

Page 93: GoAzure 2015:IoTなどの大量データをStream Analyticsでリアルタイムデータ分析してみよう
Page 94: 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

SETEXExpire: PenaltyTime

Page 95: 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

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

実際に使った際の考察

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

はまった点

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

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));

のように強制的にリストを閉じてデコードしてます。

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

Event HubsからのイベントをSubscribeできない

当初、他のシステムと同様PythonでSubscribe→RedisへSETを行おうと考えていたが、Qpid-Protonを使用してもEvent Hubsへ接続が行えず断念。(原因は恐らくConsumerGroupとPartitionの指定の不備)

しかしAMQPでのDirect Connectの場合はパーティション毎にコネクションを張る必要があり面倒なので、EventProcessorHost classを用いて接続した方が全然楽。

はまった点

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

はまった点Stream AnalyticsからのJSONデータがデコードできない

出力をJSONに指定するとリスト型で出力されるが、何故かリストが閉じていないためJSONのデコードに失敗する。

今のところは原始的ですが

var listObject = DynamicJSON.Parse(string.Format(“{0}]”, data));

のように強制的にリストを閉じてデコードしてます。

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

課題

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

Stream Analyticsのもろもろの設定を変更する際には一度停止が必要。

e.g.

• Inputs

• Output

• Query

• Scale

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

Stream Analyticsのスケール要否の判断基準がメトリクスから読み取りにくい。

※見ることの出来るデータは以下のとおり

• Input Events

• Output Events

• Data Conversion Errors

• Out of order Events

• Errors

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

Event Hubsからのイベント受信の使い勝手がEventProcessorHost以外では悪い。

そのためLinux系でシステムを組みながらEvent HubsでLambda Architectureなどを組みづらい。

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

現状はまだプレビュー版のため正式リリース時にはこの課題も解消しているかもしれません。

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

まとめ

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

• IoTのトレンドは今後確実に伸びていく

• 大量のデバイスから生成されるデータ集計にはバッチ処理に加えてリアルタイム性も必要となってくる

• Event Hubsへのデータの送信からStream Analyticsでのクエリ実行までは物凄く簡単

• Event Hubs + Stream AnalyticsはIoTのみでなくM2Mのリアルタムログ分析基盤としてはかなり強力なツールになり得る

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

Thank you