sensorbee: stream processing engine in iot

Post on 13-Jan-2017

827 Views

Category:

Technology

6 Downloads

Preview:

Click to see full reader

TRANSCRIPT

SensorBeeStream Processing Engine in IoT

Stream Processing Casual Talks #1

TANAKA Daisuke2016/07/22

自己紹介と会社紹介

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

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

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

– ミッション:

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

2

3

ポジショントーク

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

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

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

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

ディープラーニング

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

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

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

本日話す内容

SensorBee をさらっと知る

SensorBee の中身を知る

SensorBee のプラグインを知る

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

4

本日話す内容

SensorBee をさらっと知る

SensorBee の中身を知る

SensorBee のプラグインを知る

5

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

7

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

Load: データの書き出し

SensorBee の事例に置き換える

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

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

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

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

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

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

生成• ...

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

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

8

教科書的な ETL (OTLP / OLAP)

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

TransformExtract Load

9

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

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

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

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

TransformExtract

機械学習!

学習モデル

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

Load

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

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

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

10

DIMoソリューション

業界別

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

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

Deep

Inte

lligen

ce in

-Mot

ion

(DIM

o)タスク別

自動車

ヘルスケア

製造業 異常検知

映像解析

…???

本日話す内容

SensorBee をさらっと知る

SensorBee の中身を知る

SensorBee のプラグインを知る

11

12

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

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

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

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

駆け足で説明

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]

駆け足で説明

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

駆け足で説明

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;

駆け足で説明

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

駆け足で説明

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

駆け足で説明

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

駆け足で説明

SensorBee の処理トポロジー

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

– DAG として表現される

20

Continuous QueriesStreaming Inputs

data stream

駆け足で説明

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

駆け足で説明

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

駆け足で説明

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

駆け足で説明

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

駆け足で説明

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

駆け足で説明

26

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

data: SensorBee で使用する型

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

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

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

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 問題

本日話す内容

SensorBee をさらっと知る

SensorBee の中身を知る

SensorBee のプラグインを知る

28

29

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

30

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

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

31

外部 API と繋げる

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

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

slack

account info

translate slack

Microsoft Translator Text API

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

SensorBee まとめ

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

33

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

Copyright © 2016-

Preferred Networks All Right Reserved.

参考文献

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

We're Hiring!!

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

プロダクト開発系

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

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

36

top related