Googleは今年初め,Cloud Dataflowを発表した。大量のデータをバッチ,あるいはリアルタイムで処理するためのサービスとSDKだ。そして今回,同社はDataflow Java SDKをオープンソースにした。開発者がその動作内容を確認したり,オンプレミスあるいはクラウド上で動作するサービスにSDKを使用することが可能になる。
Dataflowは,FlumeJava - データ並列パイプラインを生成するJavaライブラリ - と,MillWheel - フォールトトレラントなストリーム処理アプリケーション構築のためのフレームワーク - から発展させた技術を採用した,クラウド上のサービスである。いずれもGoogle社内の“数百人の開発者”によって利用されているものだ。サービス自体は言語に依存しないが,Googleはアプリケーション開発を容易にするためにJava SDKを提供している。
Dataflowが採用する中心的な概念は,“入力データソースを読み込み,データを変換し,結果を出力として書き込む,という一連のオペレーション”で構成されるパイプラインだ。データは有限サイズないし無限サイズのコレクション(Collection)に編成され,いくつものトランスフォーメーション(Transformation)へと送られる。トランスフォーメーションは,入力となるコレクションを操作して,出力のコレクションを生成するデータ処理である。パイプラインを実行する環境は,パイプライン・ランナ(Pipeline Runner)と呼ばれる。SDKでは,ローカルマシン用のDirectPipelineRunner,Google Cloud Platform用のDataflowPipelineRunner,同じくGoogle Cloud用で,実行ステータスをログメッセージとして表示するBlockingDataflowPipelineRunnerの3つが提供されている。
パイプラインは,トランスフォーメーションを線形に順次実行するシンプルなものでも,ブランチした後にマージするような,トランスフォーメーションパスを持った有向グラフなどの複雑なものでもよい。パイプラインではデータの共有や,別のパイプラインでトランスフォーメーションを行うことはできない。また,パイプラインは非同期に動作するので,Dataflowサービスでは,いくつかのトランスフォーメーションを実行する順序を決めておいて,プロセス全体を効率面で最適化することも可能だ。
DataflowアプリはGoogle Cloud Platformにデプロイすることも可能だ。コードを実行するVMの提供やデータストレージ,あるいはデータ処理のためのBigQuery機構といったすべてのインフラストラクチャを,Google Cloud Platformが処理してくれる。他のランナを使ってローカルに,あるいは他のクラウドにデプロイして,同様のサービスを開発することも可能だ。
Dataflow SDKには利用例が付属する。開発者の質問に答えるStack Overflowのタグも用意されている。