Sparkの研究

Apache Sparkは、ビッグデータ分析に特化したAMPLab(UC Berkeley)で研究プロジェクトとして始まりました。

私たちの目標は、MapReduceよりもはるかに広範なクラスのアプリケーションをサポートし、かつ自動的な耐障害性を維持するプログラミングモデルを設計することでした。特に、MapReduceは、複数の並列操作間で低レイテンシのデータ共有を必要とするマルチパスアプリケーションには非効率的です。これらのアプリケーションは分析において一般的であり、以下のようなものを含みます。

  • 反復アルゴリズム。多くの機械学習アルゴリズムやPageRankのようなグラフアルゴリズムを含みます。
  • インタラクティブなデータマイニング。ユーザーがクラスター全体にわたってデータをRAMにロードし、繰り返しクエリを実行したい場合。
  • ストリーミングアプリケーション。時間の経過とともに集計状態を維持するもの。

従来のMapReduceとDAGエンジンは、非巡回データフローに基づいているため、これらのアプリケーションには最適ではありません。アプリケーションは一連の個別のジョブとして実行する必要があり、各ジョブは安定ストレージ(例:分散ファイルシステム)からデータを読み取り、安定ストレージに書き戻します。各ステップでデータをロードし、レプリケートされたストレージに書き戻すことにかなりのコストがかかります。

Sparkは、これらのアプリケーションを効率的にサポートするために、弾力性分散データセット(RDD)と呼ばれる抽象化を提供します。RDDは、レプリケーションを必要とせずに、クエリ間でメモリに格納できます。代わりに、RDDは lineage を使用して障害発生時に失われたデータを再構築します。各RDDは、他のデータセットからどのように構築されたか(`map`、`join`、`groupBy`などの変換によって)を記憶しており、それ自体を再構築できます。RDDにより、Sparkはマルチパス分析において既存のモデルよりも最大100倍高速に実行できます。RDDは、さまざまな反復アルゴリズム、インタラクティブなデータマイニング、および非常に効率的なSQLエンジン(Shark)をサポートできることを示しました。

Sparkの背後にある研究の詳細については、以下の論文を参照してください。