sensorbee: stream processing engine in iot

36
SensorBee Stream Processing Engine in IoT Stream Processing Casual Talks #1 TANAKA Daisuke 2016/07/22

Upload: daisuke-tanaka

Post on 13-Jan-2017

827 views

Category:

Technology


6 download

TRANSCRIPT

Page 1: SensorBee: Stream Processing Engine in IoT

SensorBeeStream Processing Engine in IoT

Stream Processing Casual Talks #1

TANAKA Daisuke2016/07/22

Page 2: SensorBee: Stream Processing Engine in IoT

自己紹介と会社紹介

TANAKA Daisuke ( 田中大輔 ) (@disktnk)– PFN のエンジニア

– 製品開発、 SensorBee 、異常検知

Preferred Networks. Inc, (PFN)– 2014/03 に Preferred Infrastructure よりスピンオフ

– ミッション:

IoT 時代に向けた新しいコンピュータを創造するあらゆるモノに知能をもたせ、分散知能を実現する

2

Page 3: SensorBee: Stream Processing Engine in IoT

3

ポジショントーク

エッジヘビーコンピューティング

– 人が生み出すデータから、機械が生み出すデータへ

– データ量の爆発、データ種類の爆発によりデータの中央集権的収集がより困難となる

– データを一か所に集めない前提のもとで深い分析を実現する( もちろんクラウドも積極的に使っていく )

ディープラーニング

– データ量の爆発、データ種類の爆発に対して、人がルールを書くのは限界がある

– 音声認識・画像認識・ゲーム AI などで顕著な成果

– デバイスの進化、 GPU の利用など様々な要因により、実世界で応用されるようになった

Page 4: SensorBee: Stream Processing Engine in IoT

本日話す内容

SensorBee をさらっと知る

SensorBee の中身を知る

SensorBee のプラグインを知る

本日の NG ワード : 人工知能、リアルタイム

4

Page 5: SensorBee: Stream Processing Engine in IoT

本日話す内容

SensorBee をさらっと知る

SensorBee の中身を知る

SensorBee のプラグインを知る

5

Page 6: SensorBee: Stream Processing Engine in IoT

6

SensorBee: Intelligent Streaming ETL for IoT

構造化データあるいは非構造化データの抽出 (Extract) および転送 (Transform) の機能を揃えた IoT 向けストリーム処理エンジン

エッジ及びフォグ (*) で動かすことを前提としている。 Go 実装。

BQL という SQL に似たスクリプトで処理トポロジーを記述

Camera

Vehicle

Router

Sensor

fluentd

RDBMS

Search Engine

NoSQL

Data Sources Data Destinations

SensorBee

(*) https://www.cisco.com/c/dam/en_us/solutions/trends/iot/docs/computing-overview.pdf

Page 7: SensorBee: Stream Processing Engine in IoT

7

ETL ツールとしての SensorBee Extract: データの抽出 ( 前処理や整形を含むことも ) Transform: 加工:実際の目的とする処理をする

Load: データの書き出し

SensorBee の事例に置き換える

Extract Transform Load• 監視カメラ画像を取得• weblog から欲しいデー

タを抽出• 軸受けの振動データ・温

度データを取得• デバイスの位置データを

取得• 会話ログから質問を取得• ...

• 画像から対象を認識・分類・タグ付け

• 機器の異常スコアを計算• 質問に対応する応答文を

生成• ...

• テキストファイルに保存• ビデオストリームとして

流す• DB に書き込む• ...

Page 8: SensorBee: Stream Processing Engine in IoT

8

教科書的な ETL (OTLP / OLAP)

データ処理基盤としての SensorBee

TransformExtract Load

Page 9: SensorBee: Stream Processing Engine in IoT

9

エッジヘビーコンピューティング

– エッジからロードまでのデータフローは SensorBee に一任する

– 研究者や機械学習のエンジニアはアルゴリズムの作成・モデルの改善に集中する

データ処理基盤としての SensorBee

TransformExtract

機械学習!

学習モデル

• DB ?• クラウド?• 別のモジュール?

Load

Page 10: SensorBee: Stream Processing Engine in IoT

製品としての SensorBee DIMo: Deep Intelligence in Motion

– 業界・課題別に機能をまとめたパッケージ

– SensorBee 上で動く機械学習エンジンとして作り上げることにより、製品として横展開できるようにしている

10

DIMoソリューション

業界別

: IoT 向けストリームデータ処理基盤

: ディープラーニングフレームワーク

Deep

Inte

lligen

ce in

-Mot

ion

(DIM

o)タスク別

自動車

ヘルスケア

製造業 異常検知

映像解析

…???

Page 11: SensorBee: Stream Processing Engine in IoT

本日話す内容

SensorBee をさらっと知る

SensorBee の中身を知る

SensorBee のプラグインを知る

11

Page 12: SensorBee: Stream Processing Engine in IoT

12

SensorBee と BQL SensorBee では BQL という CQL の方言で処理を記述する

「第 4回ビックデータ処理基盤研究会」で使用した公開済み資料をここでも使います。駆け足気味で説明します。

– ストリーム処理と SensorBeehttp://www.slideshare.net/disktnk/sensorbee-59870877

Page 13: SensorBee: Stream Processing Engine in IoT

1. (Continuous) Query の登録

2. データを流す、あるいは既に流れている

3. 入力されたデータに対して処理を行う “ on the fly”4. 処理結果を ( クライアントに対して )継続的に出力する

Data Stream Management System(DSMS)

13

Continuous QueriesStreaming Inputs Streaming Outputs

data stream

1

3

42

駆け足で説明

Page 14: SensorBee: Stream Processing Engine in IoT

Continuous Query のセマンティクス

Operators– 入力された 1つあるいは複数のデータに対して処理する単位。

– stream-to-relation, relation-to-relation, relation-to-stream

Queues– Operator間のデータ。 SensorBee では 1つのデータを Tuple と呼ぶ。

Synopses– ストリームの操作や状態 1つ 1つの (簡易 )表現の単位。 Operator とは独立して

Query Plan の最適化を考えるとき便利。 SensorBee では特に定義していない。

14

[Aras et al., 2006][Jain et al., 2008]

駆け足で説明

Page 15: SensorBee: Stream Processing Engine in IoT

Continuous Query Operators: シンプルな例

selection

join

count

15

σaS1 a a a a

f

pass or drop

⋈S1

b d

c a d b ainsert

S2b d g f e

probe

9S1 10 9 8 7

update (to “10”)

b a

f

generate result

b

駆け足で説明

Page 16: SensorBee: Stream Processing Engine in IoT

Continuous Query Operator Type と BQL BQL (SensorBee で実装されている CQL の方言 ) のサンプル

16

SELECT RSTREAM S1.id, S1.hoge1, S2.hoge2FROM S1 [RANGE 1 TUPLES], S2 [RANGE 1 TUPLES]WHERE S1:id = S2:id;

駆け足で説明

Page 17: SensorBee: Stream Processing Engine in IoT

BQL: Stream-to-Relation BQLサンプル

– Tuple based: [RANGE 1 TUPLES]Time based: [RANGE 1 SECONDS]

– Buffering: [RANGE 3 SECONDS, DROP NEWEST IF FULL]– Sliding Window, Tumbling Window (SensorBee では未サポート )

– セマンティクスが難しい。。

17

SELECT RSTREAM S1.id, S1.hoge1, S2.hoge2FROM S1 [RANGE 1 TUPLES], S2 [RANGE 1 TUPLES]WHERE S1:id = S2:id;

stream-to-relation

駆け足で説明

Page 18: SensorBee: Stream Processing Engine in IoT

BQL: Relation-to-Relation BQLサンプル

– Selection– Join– Aggregation– Filter etc...

18

SELECT RSTREAM S1.id, S1.hoge1, S2.hoge2FROM S1 [RANGE 1 TUPLES], S2 [RANGE 1 TUPLES]WHERE S1:id = S2:id;

relation-to-relation

駆け足で説明

Page 19: SensorBee: Stream Processing Engine in IoT

BQL: Relation-to-Stream BQLサンプル

– RSTREAM / ISTREAM / DSTREAMExample: http://sensorbee.readthedocs.org/en/latest/bql.html#id4

– Detail: http://sensorbee.readthedocs.org/en/latest/bql.html#relation-to-stream-operators

19

SELECT RSTREAM S1.id, S1.hoge1, S2.hoge2FROM S1 [RANGE 1 TUPLES], S2 [RANGE 1 TUPLES]WHERE S1:id = S2:id;

relation-to-stream

駆け足で説明

Page 20: SensorBee: Stream Processing Engine in IoT

SensorBee の処理トポロジー

Topology– SensorBee では、入力から出力までの 1つのまとまりを Topology として表現

– DAG として表現される

20

Continuous QueriesStreaming Inputs

data stream

駆け足で説明

Page 21: SensorBee: Stream Processing Engine in IoT

Source

Source– Topology への入力を表現する Component

21

Continuous QueriesSources

data streamS1

S2

S3

CREATE SOURCE S1 TYPE fluentd WITH ...;CREATE SOURCE S2 TYPE mqtt WITH ...;CREATE SOURCE S3 TYPE user_source WITH ...;

駆け足で説明

Page 22: SensorBee: Stream Processing Engine in IoT

Stream

Stream– Tuple への操作 ( 内部実装的には “ Box”)

22

Streams

Sources

S1

S2

S3

CREATE STREAM B1 AS SELECT ISTREAM udf1(*) FROM S1 [RANGE 1 SECONDS], S2 [RANGE 1 SECONDS] WHERE S1:id = S2:id;

B1

B3

B2

駆け足で説明

Page 23: SensorBee: Stream Processing Engine in IoT

Sink

Sink– Topology からの出力を定義する

23

Streams

Sources

S1

S2

S3

B1

B3

B2

Sinks

D1

D2

D3

CREATE SINK D1 TYPE fluentd WITH ...;INSERT INTO D1 FROM B1;CREATE SINK D2 TYPE mqtt WITH ...;CREATE SINK D3 TYPE user_sink WITH ...;

駆け足で説明

Page 24: SensorBee: Stream Processing Engine in IoT

User Defined Stream-generating Function (UDSF)

UDSF– 新たな Source として振る舞えるユーザ定義関数

24

Streams

Sources

S1

S2

S3

B1

B3

B2

Sinks

D1

D2

D3

CREATE SOURCE B2 AS SELECT RSTREAM * FROM udsf1(“S2”) [RANGE 1 SECONDS];

駆け足で説明

Page 25: SensorBee: Stream Processing Engine in IoT

User Defined State (UDS)

UDS– ストリーム上の各 Component から共通でアクセスできる Shared State

25

Streams

Sources

S1

S2

S3

B1

B3

B2

Sinks

D1

D2

D3

CREATE STATE G1 TYPE user_state WITH...;CREATE SOURCE B3 AS SELECT ISTREAM * udf3(“G1”, B2:*), S3:* FROM B2 [RANGE 1 SECONDS], S3 [RANGE 1 SECONDS] WHERE B2:foo = S3:foo;

G1

駆け足で説明

Page 26: SensorBee: Stream Processing Engine in IoT

26

Component core: topology や source / box / sink 、ストリーム処理のコアの実装

data: SensorBee で使用する型

bql: BQL パーザ、 BQL 実行エンジン

server: 基本的には “ sensorbee run” でサーバを起動して使用する

client: BQL の実行は client経由 cmd: ビルドツールや BQL 実行クライアントツール、サブコマンドなど

Page 27: SensorBee: Stream Processing Engine in IoT

27

Go言語による実装

ストリーム処理 OSS 界では JVM系言語が大人気

– Java: Storm ( コア部分は Clojure), NiFi, Heron, etc...– Scala: Spark, Samza, Flink, Kafka stream, etc...

- akka は確かに使いやすい

SensorBee は 100% Go言語実装

– goroutine 超絶便利、使いやすすぎて中毒症状起こす

– ライブラリが (Javaほどではないが ) そこそこ充実している

– cgo で C/C++ ライブラリとの (静的 ) リンクが可能

- go1.6 Go-pointer to Go-pointer 問題

Page 28: SensorBee: Stream Processing Engine in IoT

本日話す内容

SensorBee をさらっと知る

SensorBee の中身を知る

SensorBee のプラグインを知る

28

Page 29: SensorBee: Stream Processing Engine in IoT

29

SensorBee とプラグイン : Source / Sink 系 opencv fluentd mqtt websocket raspivideo kafka ( 非公式 ) slack ( 非公式 )

Page 30: SensorBee: Stream Processing Engine in IoT

30

SensorBee とプラグイン : UDF / UDS 系 opencv py / pymlstate jubtus

– classifier / regression / anomaly mstranslator ( 非公式 )

Page 31: SensorBee: Stream Processing Engine in IoT

31

外部 API と繋げる

外部 API と繋げる簡単なデモ

– https://github.com/disktnk/sb-slack/tree/master/example

slack

account info

translate slack

Microsoft Translator Text API

Page 32: SensorBee: Stream Processing Engine in IoT

Twitter のつぶやきの分類

機械学習と組み合わせたデモ

– Tutorial 収録 http://sensorbee.readthedocs.org/en/latest/tutorial.html#using-machine-learning

– Elasticsearch と機械学習を実際に連携させる http://www.slideshare.net/nobu_k/elasticsearch-59627321

32

Twitter

Gender

Age

Formatting Label

ing fluentd

Page 33: SensorBee: Stream Processing Engine in IoT

SensorBee まとめ

http://sensorbee.io http://docs.sensorbee.io/en/latest/ https://github.com/sensorbee/sensorbee https://github.com/sensorbee/ (公式プラグイン )

33

Page 34: SensorBee: Stream Processing Engine in IoT

スライドは以上です。ご静聴ありがとうございました。

Copyright © 2016-

Preferred Networks All Right Reserved.

Page 35: SensorBee: Stream Processing Engine in IoT

参考文献

A. Arasu, S. Badu, and J. Widom. The CQL continuous query language: Semantic foundations and query execution, 2006.

N. Jain, S. Mishra, A. Srinivasan, J. Gehrke, J. Widom, H. Balakrishnam, U. Cetintemel, M. Cheriniack, R. Tibbertts, and S. Zdonik. Towerds a streaming SQL standard, 2008.

Lukasz Golab, M. Tamer Özsu. Data Stream Management, 2010.

35

Page 36: SensorBee: Stream Processing Engine in IoT

We're Hiring!!

Deep Learning系– ビジョン、音声、時系列データ、強化学習、異常検知

プロダクト開発系

– 最新の研究をいち早くユーザへ届けるためのプロダクト開発にも力を入れています

– ストリーム処理のエキスパートももちろん募集中!

36