sensorbee: stream processing engine in iot
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
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