MapReduce は、巨大なデータ セットの並列問題を解決するのに優れていることを理解しています。しかし、ある意味では並列化可能であるが、MapReduce に適していない問題の例はありますか?
2 に答える
いくつかの観察:
Hadoop と、Hadoop がコピーした MapReduce の初期の Google 実装 (つまり、キーと値のマッピングのみに限定) を、MapReduce が基づいている一般的な分割と集計の概念と混同してはなりません。
MapReduce のアイデア (分割 & 集約、分割 & コンカーは、他のいくつかの名前にすぎません) は、独立して並列処理できる小さなサブタスクに分割することによる処理の並列化に関するものであり、幅広い真の問題に適用できます (データ集約型、コンピューティング集約型、またはその他)
一般に、MapReduce はビッグ データ セットやデータとはまったく関係ありません。小さなデータセットや、純粋な処理の並列化に使用される計算 MapReduceでうまく使用されています。
あなたの質問に答えるために、MapReduce は通常、元のタスクを個別に並行して処理できるサブタスクのセットに分割できない場合には機能しません。実際には、ほとんどの非自明な問題は MapReduce タイプの処理で近似できるため、このカテゴリに分類されるユース ケースはほとんどありません。
はいといいえ。それは、それらがどのように構造化され、書かれているかに大きく依存します。特定のデータステップ/ map-reduce 関数で map reduce の並列化が不十分になるという問題が確かにあります。対称行列の連立方程式ソルバーはその一例です。1 つの関数で記述した場合、同時性の明らかな理由から、うまく並列化できません (多くの場合、単一ノードにロードされる可能性があります)。これに対する一般的な回避策は、行列前の計算を別のプロセッサに分離することです。これは、簡単に並列化できるためです。これを分解することで、map-reduce オプティマイザーは、そうでない場合よりも多くのノードと処理能力を取得できます。