5

map-and-reduceモデルで実行するのに非常に適した高価なジョブがあります(簡単に言うと、時間のかかるアルゴリズムを使用して以前に計算された数百のランキングを集約することです)。

私は(単なるマルチプロセッシングではなく)クラスター上でジョブを並列化することを望み、CeleryDiscoの2つの実装に焦点を合わせました。Celeryは、すぐに使用できる単純なmap-and-reduceをサポートしていません。「マップ」部分は、TaskSetsを使用して簡単に実行できますが、「reduce」部分を効率的に実装するにはどうすればよいですか。

(ディスコに関する私の問題は、Windowsで実行されないことです。また、プログラムの別の部分にセロリをセットアップしているため、map-reduce用に別のフレームワークを実行するのはかなりエレガントではないようです。)

4

2 に答える 2

2

基本的に、あるタスクの出力を取得し、その出力を別のタスクへの入力として適用する必要があります。セロリはこれでは便利ではありません。

セロリの方法では、ジョブ(マップ部分)を非同期で実行し、単一のコンピューターの場合はタスク参照自体を保持するか、DB バックエンド(redis/mongo/etc)への参照を投稿する定期的なタスク スケジューラを使用できます。この結果を収集して reduce 関数に適用するには、スケジューラが必要になる場合があります。

すべてのクラスターでマップおよびリデュース用に独自の python プロセスを実行し、結果を redis のようなメモリ データベースに保存し、セロリを使用してマップおよびリデュースでタスクを実行するようにします。メイン プロセスでは、結果を収集して結合します。

于 2011-07-29T08:40:06.887 に答える
0

以下のブログをぜひご覧ください。

http://mikecvet.wordpress.com/2010/07/02/parallel-mapreduce-in-python/

于 2013-08-27T13:46:32.443 に答える