DryadとDryadLINQはコンピュータクラスタやデータセンターでの大規模データ処理を容易にする、C#開発者のためのMicrosoft Researchプロジェクトである。
Dryadはコンピュータクラスタやデータセンター上で、逐次プログラムを並列に実行するための基盤だ。下の図に示されているように、並列処理はプログラムがノード、プログラム間の通信チャネルがエッジであるような非循環有向グラフとして編成される。
グラフは、入力がどこから来て出力がどこへ行くかというプログラム間の関係をわかりやすく表している。プログラムのデッドロックを避けるため、グラフは非循環でなければならない。ジョブマネージャ(JM)がグラフを保持しており、入力チャネルの準備が整い、かつ利用可能なコンピュータがある時に、プログラムの実行をスケジューリングする。利用可能なコンピュータはネームサーバ(NS)から取得し、プログラムのスケジューリングはデーモン(D)を介して行う。プログラム(ノード)間の通信チャネルはファイルや共有メモリ、もしくはTCPパイプに相当する。また、グラフは実行中に動的に変更でき、耐障害性を持っている。デバッグのために、単一システム上で実行することもできる。DryadはすでにMicrosoftのAdCenterで使用されている。
DryadLINQは「LINQプログラムをPCクラスタ上で実行可能な分散処理に翻訳するコンパイラ」と言える。この翻訳処理は以下よって実現されている。
- C#とLINQデータオブジェクトが分散パーティションファイルになる。
- LINQクエリが分散Dryadジョブになる。
- C#メソッドがDryadジョブのノード上で動作するコードになる。
DryadLINQには以下のような機能がある。
- 宣言的プログラミング:処理をSQLに似た高レベルの言語として表現できる。
- 自動並列化:DryadLINQコンパイラは、逐次的な宣言型コードから大きなコンピュータクラスタ全域にまたがる高度な並列クエリプランを生成する。各マシンのマルチコアの並列性を生かすために、DryadLINQは並列化フレームワークであるPLINQに依存している。
- Visual Studioとの統合:DryadLINQのプログラマはインテリセンス、リファクタリング、統合デバッグ、ビルド、ソースコード管理といったVisual Studioのツールセットを活用できる。
- .NETとの統合:Visual Basicを含む全ての.NETライブラリや動的言語が利用できる。
- タイプセーフ:分散処理は静的に型チェックされる。
- 自動シリアル化:データ移送メカニズムが自動的に全ての.NET型を処理する。
- ジョブグラフの最適化
- 静的:豊富な項書換クエリ最適化ルールがクエリプランに適用され、局所性の最適化とパフォーマンス向上を行う。
- 動的:実行時クエリプラン最適化は、処理されたデータセットの統計を考慮に入れたプランに自動的に適応する。
有用な参考情報: 論文: Dryad: 逐次的要素から構成される分散データ並列プログラム, プレゼンテーション: Dryad, 論文: DryadLINQ: 高級言語を使用した汎用分散データ並列コンピューティングシステム, DryadLINQプログラムの例 (PDF).