「.NET 開発基盤部会 Wiki」は、「Open棟梁Project」,「OSSコンソーシアム .NET開発基盤部会」によって運営されています。
目次 †
概要 †
Hadoop MapReduceと同様に
- 複数の計算機を用いてデータ処理を行う並列データ処理系
- クラスタ・コンピューティングのOSSフレームワーク
背景 †
- ディスクベースの代替手法よりもかなり速く、メモリ内の大量のデータが処理されます。
- Hadoop MapReduceが適合しない以下のケースをサポートする。
- 複雑なデータ処理を行うために,複数のジョブを連ねて実行する場合
- 同じデータを複数のジョブから利用する場合
利点 †
汎用的な並列データ処理系として利用できる。
- RDDに対する数十種類のオペレータを利用可能。
- 多様な並列データ処理をシンプルに記述できる。
- オペレータを組み合わせれば、ジョブを組み合わせる必要がない。
- 複数のオペレータは1つのタスクとしてRDDのパーテョションごとにコピーされる。
- パーティション並列性を活用でき、中間データI/Oを削減できる。
シナリオ †
適合するビッグデータ シナリオ
- 抽出、変換、読み込み (ETL)
- Filtering
- Sorting
- Aggregating
- Joining
- Cleaning
- Deduplicating
- Validating
- バッチ処理
- 機械学習(MLlib)
- グラフ処理(GraphX API)
- SQL と構造化データの処理(Spark SQL)
詳細 †
アーキテクチャ †
ドライバ †
- Spark セッション
プログラムを受け取り、それを小さなタスクに分割する。
小さくなったタスクはエグゼキュータで処理される。
エグゼキュータ †
- 各エグゼキュータまたはワーカー・ノード
- ドライバーからタスクを受け取り、そのタスクを実行。
- エグゼキュータは、クラスタと呼ばれるエンティティ上に存在。
クラスタ †
- クラスター マネージャ
次の目的でドライバーとエグゼキュータの両方と通信する。
- リソースの割り当てを管理する
- プログラム分割を管理する
- プログラム実行を管理する
コンポーネント †
Resilient Distributed Dataset (RDD) †
- 分散共有メモリを提供する分散プログラムのワーキングセット。
- 永続化先として、主に、計算機のメモリ(キャッシュ)と二次記憶を利用できる。
- メモリと二次記憶を組み合わせることも可能
- メモリに保持しきれないパーティションを一時的に二次記憶に退避
- 当該パーティションを利用する際に再び二次記憶から読み出す。
Spark Core †
- API(Java、Python、Scala、R)を介して公開
- 分散タスクディスパッチ
- スケジューリング
- および基本I/O機能
Spark SQL †
- 提供
- DataFrames?というデータ抽象化
- テーブルのようなデータ構造をもった分散処理用データセット
- テーブル構造なのでSQLライクにデータを操作できる。
- RDDではなくDataFrame?が主流になって行く。
- ドメイン固有言語(DSL) > SQL言語
- CLI、JDBC / ODBCサポートを実装している。
- Scala、Java、PythonからDataFrames?を操作できる。
その他、用途向けのライブラリ †
耐障害性 †
≒ 再実行するタスクの数を最少にする機構。
ジョブ †
物理ロギングに依る。
- 中間データをシャッフルする際に、
- 中間データを二時記憶に書き出す。
※ シャッフル:ネットワーク越しのデータ転送を伴うデータの再分散。
以下の2つの方法に依る。
参考 †
NTTデータ †
gihyo.jp … 技術評論社 †
Hadoopはどのように動くのか
─並列・分散システム技術から読み解くHadoop処理系の設計と実装