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

Post on 18-Jul-2015

3.354 Views

Category:

Data & Analytics

3 Downloads

Preview:

Click to see full reader

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

top related