MapReduceは単なる分割統治のアプリケーション以上のものですか?


26

個々の問題が個別に解決できるまで問題を小さな問題に分割し、それらを組み合わせて元の質問に答えることを、分割統治アルゴリズム設計手法と呼びます。[参照:CLRによるアルゴリズムの概要]

最近、特に非常に大きなデータセットの領域で計算上の問題を解決するこのアプローチは、分割統治ではなくMapReduceと呼ばれています。

私の質問は次のとおりです。MapReduceは、分割統治アプローチに依存する独自のフレームワーク以上のものですか、それとも何らかの点でユニークにする詳細がありますか?


分割統治はアルゴリズムの一種です。MapReduceはそのクラスの一例です。
マーティンスパマー

回答:


28

MapReduceアーキテクチャについて質問している場合、それはまさに分割統治のテクニックにすぎません。ただし、有用なMapReduceアーキテクチャには、問題セットを効率的に「分割」、「征服」、および最終的に「削減」するために、他のインフラストラクチャの山が配置されます。大規模なMapReduce展開(1000の計算ノード)では、作業を分割して何かを計算し、最終的にすべての結果を収集するこれらの手順は簡単ではありません。ロードバランシング、デッドノード検出、中間状態の保存(長時間実行される問題の場合)などは、それ自体が難しい問題です。


1
「効率的に「分割」、「征服」、そして最後に「問題を減らす」ため–これは誤解を招きます。「マップ」ステップはD&Cソルバーを必要としません(データは完全に独立しているため)ある種のスケジューラを使用した作業の; 削減ステップにはD&Cが必要です。
コンラッドルドルフ

4
この文脈では、「公正」という言葉は誤解を招きます。

述べたように、この答えは単に誤解を招くだけでなく、完全に間違っています。MapReduceは間違いなく「単なる分割統治法」ではありません
ジェリーコフィン

10

MapReduceは、非常にスケーラブルな方法で分割統治アルゴリズムを実装するためのフレームワークであり、作業単位をコンピューターの任意の大きなクラスター内のノードに自動的に配布し、作業単位を再配布することで個々のノードの障害を自動的に処理ます別のノードに。

これは非常に洗練された概念ではなく、非常に便利なインフラストラクチャです。


10

MapReduceは、ほとんどの分割および征服システムからかなり根本的な方法で分岐していますが、非常に単純なため、多くの人が見逃しています。それの真の天才は、中間結果にタグを付けることにあります。

典型的な(以前の)分割統治システムでは、作業を連続して分割し、作業パケットを並行して実行し、その作業の結果を再び連続してマージします。

MapReduceでは、作業をシリアルに分割し、作業パケットを並列に実行し、結果にタグを付けて、どの結果が他のどの結果と合うかを示します。マージは、同じタグを持つすべての結果に対してシリアルになりますが、異なるタグを持つ結果に対して並行して実行できます。

これまでのほとんどのシステムでは、マージ手順は、非常に些細なタスクを除くすべてのボトルネックになりました。MapReduceので、それは可能なタスクの性質は、すべてのマージがシリアルに行われることを必要とする場合、まだ可能。ただし、タスクが結果のある程度の並列マージを許可する場合、MapReduceはその可能性を利用する簡単な方法を提供します。他のほとんどのシステムは、次の2つのいずれかを実行します。一部のタスクで必要になる可能性があるため、すべてのマージをシリアルで実行するか、特定のタスクのパラレルマージを静的に定義します。MapReduceを使用すると、マージステップで十分なデータが得られ、一貫性を維持しながら(マッピングステップで間違いを犯していないと仮定して)可能な限り並行して自動的にスケジュールを設定できます。

また、MapReduceでは、すべてのステップが再帰的である可能性があるため、大きなタスクを並列に実行できる5つの小さなタスクに分割する初期マッピングステップがあるかもしれませんが、それらはそれぞれ(ターン)他の多くのより小さな並列タスクにマッピングされるなど。

これにより、マッピング側と削減側の両方にツリー構造が作成され、多くのマシンを活用するために大きなタスクを十分な数にすばやく分割できます。


7

MapReduceは単なる分割統治手法ではありませんが、多くの例ではそのように見えます。

マッピング手順では、1対多の関係を実行できますし、頻繁に実行することもできます。したがって、単にケースに分割しているわけではありません。

mapとreduceの間には、(実装に応じて)ソートまたはハッシュのステップがあります。この操作の効率は、全体的なリソース要件にとって非常に重要です。その詳細はアプリケーションプログラマには見えませんが、このステップはフレームワークの中心です。

縮小操作はマージの一種です。これは征服と考えることができますが、実際には、「後で使用するためにデータを送信する」または「データストアにデータを保存する」傾向があります。(注:大規模なデータセットがある場合は、入力および最終結果を含むすべてを分散させたいと思う。したがって、分散キー/値ストアは、入力を取得する場所と出力を保存する場所の両方として理にかなっている。)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.