IoT/M2MでTreasure Dataを使ってみた

IoT/M2Mプロジェクトのビッグデータ解析部分にTreasure Data Serviceを利用してみたので勘所をまとめてみます。

※ちなみに色々と大人の事情を考慮してしがらみのない個人ブログの方にエントリすることにしました。

まずIoT/M2Mプロジェクトは(今のところ)以下のようなケースが多いです。

大きく分けると流れるデータをリアルタイムに処理/判断したいストリームデータ処理(App1 -> App2 -> App3)と蓄積したデータを解析したいビッグデータ解析に分かれます。

また、特にRawデータが必ずと言って良いほど圧縮されていたり、データが集約される箇所(ネットワーク的にはGatewayみたいな)がケースバイケースだったり、データの発生頻度が小刻みなのでデータ量が膨大であるなど、そんなのIoT/M2Mに限った話ではないと言われればそれまでなんですが、IoT/M2Mの場合はほとんどの場合これくらい複雑な要件になるというのが特徴かと思います。

特にRawデータですが、古いM2Mプラットフォームから上がってくるログは以下のようなイメージの形式が多いです。

このログを以下のように行列変換して…

IoT/M2Mデータの可視化で求められることの多い散布図に使えるような以下のデータ形式にtransformします。

行列変換はHiveではできない(と思う)ので変換プログラムを書いたりしますし、要件によってはMATLABでやるような数値計算をトライアル期間は手動で行い、パターン化できるとPythonなどで実装するというものもありました。

このようにIoT/M2Mでは至る箇所にプログラムが散在する可能性が高く、個人的にはAmazon Lambdaでこの辺りの実装が比較的わかりやすくなることを期待していますし、視覚的にも全体を俯瞰できるツールとしてenebularというサービスも作りました(まだAmazon Lambdaのモジュールは作成していませんが勿論作成中です)

こうなると(特にPaaS, BaaS的なところにプログラムしていくと)どうしてもS3経由でTreasure Dataにロードするケースが多くなってきますので、個人的にはToolbeltでやるより更に手軽にS3からロードできる専用の機能が欲しいくらいです。

それでもTreasure Data ServiceにデータをロードすればHiveやPigでtransformや集計ができ、PostgresqlやRedshift, Tableau Serverなどにアウトプットできるのは以前に比べて格段に便利ですし、データ処理の自動化が誰でも現実的に簡単に早く実現できるようになったことは間違いないです。

今後もTreasure Data自体もResult Outputの種類を増やしたりワークフロー的なものを実装したり発展していくと思いますので、それぞれのサービスの動向を見ながら、その時々で痒いところに手が届くようなenebularのモジュールを作っていこうかな、と思ってます(要らなくなればそれそれで良いことですし)

※ちなみにenebularは[enebular][salesforce] enebularでMail to Case(メール to ケース)みたいなことをするの例のようにIoT/M2M向けというよりは、もっと汎用的にクラウドサービス同士を簡単に連携できるサービスを目指しています。

今回は本当に現時点での勘所をまとめさせていただきましたが、まさに日進月歩で手法も変わっていくと思いますので今後も機会があればアップデートしていきたいと思います。

こちらのエントリはTreasure Data Advent Calendar 2014に参加しています。