Try SensorBee - No.1


SensorBee

SensorBeeはPreffered Networksさんが先日発表したStreaming ETL(Extract/Transform/Load)のためのOSSです。

ニュースリリースの中でそのコンセプトを以下の様に説明されています。

SensorBeeはネットワークのエッジやフォグで発生する非構造化ストリームデータに対して継続的に機械学習を適用し、その結果を既存のデータベースやデータ分析システムに転送したり、直接ロボットなどにフィードバックして制御を行うために開発されました。機械学習ではChainerをサポートすることにより、deep learningのストリームデータへの適用が可能となっています。またJubatusで使用されているアルゴリズムの一部もサポートされています。

エッジ側でのストリーム処理を考える

ストリーム処理系は分散化したサーバサイドで処理するフレームワークが最近では色々出ていて、Spark StreamingやApache Storm等はその代表格ですよね。

ただ、ことIoTの場合、データソースから生成される情報量が半端じゃなく多くなります。そうなってくると、例えばセンサ信号レベルに近いレイヤでは、サーバ側ではなくてエッジ側で処理を実行しないと、レイテンシやデータ転送量の問題が発生することもしばしば。エッジ側でストリーム処理したいケースは当然多いわけです。

(データ変換や閾値範囲処理の度に、全部処理をサーバ側に投げられたら、サーバ管理者にタコ殴りにされそうですもんね。)

勿論、たとえIoTであっても大規模な集計や高い負荷がかかる学習演算はサーバサイドで実行した方が良いことは変わりませんし、エッジ側とクラウド側で用途ごとに実装する処理を分散させる様なアーキテクチャを構築することが大切になってくるわけですね。

SensorBeeの特徴

SensorBeeはそういったユースケースを想定して、エッジ側でのETL、Stream Processingをかなり意識して作られているようです。

公式HPには以下の3つのコンセプトが掲げられています。

(1)Stateful

  • 非構造化データから有用な情報を取り出す場合、機械学習を使いたいケースがしばしば。
  • SensorBeeはオンライン機械学習において力を発揮する。
  • JubatusやChainer等の複数の機械学習ツールをサポート。
  • 更に、SensorBeeが提供するクエリ言語はテンポラリデータのハンドリングが可能。

(2)Expressive

  • SensorBeeのクエリはSQLに似たBQLで実装されている。
  • BQLはスキーマレスで、JSONの様な内部データ構造を持つ。
  • JSONを簡単に扱うことが可能。

(3)Lightweight

  • 最小フットプリントは30MBで、RaspberryPi等の非力なマシンでも実行可能。
  • 将来的にはより小さなチップに組み込んで、BQLを実行できるようにすることを目指している。

普段このあたりで頭を抱えている私、俄然興味が湧いてきました。

とりあえずインストール

とりあえず、インストールして使ってみます。
かなり簡単なのでこんな記事はいらないかもと思いつつ。。。

Goの環境を用意しよう

Goの開発環境を用意します。もちろん、既にある場合は必要なし。
Macの場合はhomebrewで楽ちん。

$ brew install go

ついでに、.bash_profileにGOROOT, GOPATH, PATHの設定を追記。
私の環境では以下の様に設定されていました。(随分前に書いたからよく覚えてない…。)

# Go
export GOROOT=/usr/local/opt/go/libexec
export GOPATH=$HOME/go
export PATH=$PATH:$GOROOT/bin:$GOPATH/bin

これでGoの環境設定は大丈夫。

SensorBeeのインストール

よし、ではSensorBeeをインストールするぞ!といっても一行以下を実行するだけです。

$ go get gopkg.in/sensorbee/sensorbee.v0/...

以下を実行してみましょう。

$ sensorbee run

うまくいかない時は、多分PATHの設定等がまずいかも。

Next

次回は以下のチュートリアルを実行しながら、SensorBeeの基本的なコンセプトや使い方を見ていきます。
http://docs.sensorbee.io/en/latest/tutorial.html#getting-started