Apache Spark と DocumentDB で世界各地に分散するデータをリアルタイム機械学習に活用
執筆者: Denny Lee (Principal Program Manager, Azure DocumentDB)
このポストは、4 月 5 日に投稿された Real-time machine learning on globally-distributed data with Apache Spark and DocumentDB の翻訳です。
マイクロソフトは、カリフォルニア州サンノゼで開催された Strata + Hadoop World 2017 Conference で DocumentDB 用 Spark コネクタ (英語) を発表しました。この機能を利用すると、リアルタイム データ サイエンスや機械学習、世界各地に分散する Azure DocumentDB のデータ検索が可能になります。Apache Spark を Azure DocumentDB に接続すれば、すばやいデータの保持やクエリ発行が可能な DocumentDB 上で常に変化するデータ サイエンスの課題を解決できるようになります。DocumentDB 用 Spark コネクタは、DocumentDB でネイティブに管理されるインデックスを効率的に使用し、IoT、データ科学、分析などのシナリオ (英語) で、世界各地に分散され目まぐるしく変化するデータに対して、分析時の列の更新や、述語フィルターのプッシュダウンを実施できます。このコネクタは、Azure DocumentDB Java SDK (英語) を使用しています。ぜひ GitHub (英語) から Spark コネクタをダウンロードし、利用を開始してください (英語)。
DocumentDB の概要
Azure DocumentDB はマイクロソフトのグローバル分散データベース サービスで、世界規模のアプリケーション構築に対応した設計となっています。DocumentDB では、複数の地域にわたってスループットとストレージの両方を弾力的にスケーリングできます。このサービスでは、99% の処理で保証された低レイテンシ、99.99% の高可用性、予測可能なスループット、明確に定義された複数の一貫性モデルなどが包括的な SLA に基づいて提供されます。DocumentDB はスキーマに依存せず書き込みに最適化されたデータベース エンジン (英語) であるため、既定で挿入されたデータに自動的にインデックスを付与し、規模にかかわらず SQL、MongoDB、JavaScript 統合言語クエリを実行できます。クラウド サービスとして、マルチテナントや世界規模の分散型データベースに対応するようゼロから慎重に設計されています。
このような独自の特長を持つため、シームレスなスケーリングや世界規模のレプリケーションが必要な Web、モバイル、パーソナライズ、ゲーム、IoT などのアプリケーションの運用や分析ワークロードに適しています。
機械学習やデータ サイエンスに DocumentDB を利用するメリット
DocumentDB は完全にスキーマ フリーです。JSON データ モデルをデータベース エンジンで直接使用することにより、明示的なスキーマやセカンダリ インデックスを指定しなくても、JSON ドキュメントにインデックスが自動で付与されます。DocumentDB では、一般的な SQL 言語を使用して JSON ドキュメントに対するクエリを発行できます。DocumentDB のクエリは、JavaScript の型システム、式の評価、関数呼び出しをベースとしています。このため、リレーショナル プロジェクション、JSON ドキュメント間の階層型ナビゲーション、自己結合、空間クエリ、完全 JavaScript のユーザー定義関数 (UDF) 呼び出しなど、多数の機能で自然なプログラミング モデルを使用できます。今回より、SQL 文法を拡張して集計に対応したことで、世界各地に分散するデータの集計が可能になりました。
図 1: DocumentDB 用 Spark コネクタを使用すると、Spark ワーカー ノードと DocumentDB データ パーティション間でデータが並列処理されます。
分散データの集計と高度な分析
「Azure DocumentDB で世界規模の集計が可能に」という記事でお伝えしたように、Azure DocumentDB で集計 (SUM、MIN、MAX、COUNT、GROUP BY を使用した SUM、DISTINCT など) がサポートされましたが、Apache Spark と DocumentDB を接続することで、Apache Spark での分散データの集計処理をさらに多様な用途で容易かつ迅速に実行できるようになります。次のスクリーンショットでは、Apache Spark の PERCENTILE_APPROX 関数を Spark SQL で実行して分散された中央値を抽出しています。
select destination, percentile_approx(delay, 0.5) as median_delay
from df
where delay < 0
group by destination
order by percentile_approx(delay, 0.5)
図 2: Azure HDInsight の Spark で Jupyter Notebook サービスを使用し、上記の分散された中央値の範囲を視覚化
述語フィルターのプッシュダウン
次のアニメーション GIF で示されるように、Apache Spark で発行されたクエリは Azure DocumentDB に述語をプッシュダウンし、既定ですべての属性に付与されている DocumentDB のインデックスを使用して範囲を絞り込みます。さらに、データの格納場所の近くで演算をプッシュすることで、その場で処理を実行し、データの移動量を抑えることができます。世界中に分散しているデータに対する分析クエリのパフォーマンスが大幅に向上します。
たとえば、シアトル (SEA) 発のフライトについて知りたい場合、DocumentDB 用 Spark コネクタでは次の処理が実行されます。
- Azure DocumentDB にクエリを送信する。
- Azure DocumentDB のすべての属性には自動的にインデックスが付与されているため、シアトルに関係するフライトのみが Spark ワーカー ノードから迅速に返される。
このように、分析、データ サイエンス、機械学習の処理実行時に伝送されるデータが、必要なデータのみに抑えられます。
超高速な IoT シナリオ
Azure DocumentDB は、高スループット、低レイテンシな IoT 環境に対応した設計になっています。次のアニメーション GIF は、あるフライトのシナリオを示しています。
これらを組み合わせると、以下のことが可能になります。
- 高スループットの同時アラート処理 (天候、フライト情報、国際的な安全警戒など)。
- Change Feed によるデバイスへの情報通知や RESTful サービスなどのダウンストリームへの情報送信 (スマートフォンのフライト遅延通知など)。
- データに対する機械学習モデルを構築する際に最新情報を利用。
更新可能な列
先に述べた超高速な IoT シナリオの、更新可能な列について詳しく説明します。
新しい情報 (フライトの遅延が 5 分から 30 分に延びた場合など) が入ってくると、機械学習モデルをすぐに再実行して最新情報を反映します。この場合、30 分の遅延がその後のすべてのフライトに及ぼす影響を予測できます。このイベントは、Azure DocumentDB の Change Feed ですばやく開始され、機械学習モデルが更新されます。
次のステップ
今回は、新たに追加された DocumentDB 用 Spark コネクタを紹介しました。Spark と DocumentDB を組み合わせることで、ビッグ データに対するアドホックかつインタラクティブなクエリの発行はもちろん、高度な分析、データ サイエンス、機械学習、人工知能での活用も実現します。DocumentDB では、世界各地のソースに蓄積されるデータを取得します。ソーシャル分析、時系列、ゲームやアプリケーションのテレメトリ、小売業のカタログ、最新のトレンドやカウンター、監査ログ システムなど多岐にわたります。Spark では、DocumentDB で取得したデータに対して、高度な分析や AI アルゴリズムを大規模に実行します。
企業や開発者は、オンライン ショッピングのおすすめ商品、リアルタイム コミュニケーション アプリケーションでの迷惑メッセージの分類、パーソナライズのための予測分析、支払いの承認や拒否を瞬時に決定する必要があるモバイル アプリケーションの不正検出モデルなどにこのシナリオを適用できます。さらには、ユーザーの操作とはまったく異なる、機械の動作に関するデータを利用した、IoT のシナリオにも適用可能です。
クエリの実行を開始するには、Azure ポータルから DocumentDB アカウントを新規作成し、Azure-DocumentDB-Spark GitHub リポジトリ (英語) のプロジェクトを利用します。Apache Spark から Azure DocumentDB への接続 (英語) の記事に詳細なガイドが記載されていますので、ご確認ください。
Twitter アカウント (@DocumentDB) をフォローして、DocumentDB の最新ニュースや新機能をご確認ください。また、ご意見などがありましたら Stack Overflow の開発者フォーラム (英語) までお寄せください。