web-dev-qa-db-ja.com

MPIを使用してHadoopを実装しないのはなぜですか?

私が間違っている場合は修正してください。ただし、私の理解では、Hadoopは異なるノード間の通信にMPIを使用しません。

これの技術的な理由は何ですか?

私はいくつかの推測を危険にさらす可能性がありますが、私が正しいかどうかを知るためにMPIが "内部で"実装されている方法を十分に知りません。

考えてみると、私はHadoopの内部についても完全に理解しているわけではありません。私はフレームワークを概念レベル(map/combine/shuffle/reduceとそれが高レベルでどのように機能するか)で理解していますが、詳細な実装の詳細はわかりません。 Hadoopはシリアル化されたデータ構造(おそらく GPBs )をTCP接続を介して、たとえばシャッフルフェーズ中に)送信していたと常に思っていました。それが真実でない場合はお知らせください。

35
artif

Hadoop/map-reduceの大きな機能の1つは、フォールトトレランスです。フォールトトレランスは、ほとんどの(いずれか?)現在サポートされていませんMPI=実装。将来のバージョンの OpenMPI で検討されています。

Sandia labs には、MPIを使用するmap-reduceのバージョンがありますが、耐障害性がありません。

25
user510306

MPIはMessage Passing Interfaceです。名前のすぐそこに-データの局所性はありません。データを計算するために、データを別のノードに送信します。したがって、MPIは、大きなデータを処理するときのパフォーマンスの点でネットワークに依存しています。

Hadoop分散ファイルシステムを備えたMapReduceは、ローカルストレージで計算を実行できるようにデータを複製します-ディスクからストリーミングして直接プロセッサーにストリーミングします。したがって、MapReduceはローカルストレージを利用して、大きなデータを処理する際のネットワークのボトルネックを回避します。

これは、MapReduceがネットワークを使用しないと言っているわけではありません...使用します。シャッフルは、多くの場合、ジョブの最も遅い部分です!しかし、それはできるだけ少なく、そして可能な限り効率的に使用します。

まとめると、Hadoop(およびその前のGoogleのもの)はMPIを使用できなかったため、MPIを使用できなかったため、MapReduceシステムは特別に開発されましたハードウェアの傾向に照らしてMPIの欠点に対処するため:ディスク容量の爆発(およびそれに伴うデータ)、ディスク速度の停滞、ネットワーク速度の低下、プロセッサギガヘルツのピーク、マルチコアがムーアの法則を引き継ぐ。

19
rjurney

真実は、HadoopはMPIを使用して実装できることです。 MapReduceは、MPIが使用されている限り、MPIを介して使用されます。 MPIには、「bcast」-すべてのデータをブロードキャストする、「alltoall」-すべてのデータをすべてのノードに送信する、「reduce」、「allreduce」などの関数があります。 Hadoopは、reduceコマンドを使用して発信通信コマンドをパッケージ化することにより、データ分散を明示的に実装し、結果メソッドを収集する必要をなくします。利点は、Hadoopを実装する前に、問題が「削減」関数に適合することを確認する必要があることです。あなたの問題は「スキャッター」/「ギャザー」により適している可能性があり、Hadoopの代わりにMPIを使用してTorque/MAUI/SGEを使用する必要があります。最後に、別の投稿で説明されているように、MPIはデータをディスクに書き込みません。 Hadoopと同じように機能し、プロセス/データを他の場所に送信して作業を行います。重要な部分は、MapReduceが最も効率的な並列化戦略であることを確認するのに十分な詳細で問題を理解し、他にも多くの戦略が存在することに注意することです。

8
BNFOguy

MPIプログラムがローカルディスクを使用できないようにする制限はありません。もちろん、MPIプログラムは常にローカルでデータを処理しようとします-RAMまたはローカルディスク-すべての並列アプリケーションと同じです。MPI 2.0(これは将来のバージョンではないため、10年前から存在します)では、プロセスを動的に追加および削除して、たとえば、あるノードで停止しているプロセスから回復できるアプリケーションを実装します。

おそらく、hadoopはMPIを使用していません。MPIは通常、CまたはFortranでのコーディングが必要であり、より科学的/学術的な開発文化を持っているためJavaバイアスのあるIT専門家による。MPIは非常に低レベルでエラーが発生しやすい。ハードウェアを非常に効率的に使用できるRAMとネットワーク。Hadoopは、効率を犠牲にして、高レベルで堅牢なものになるように努めています。MPIプログラミングには、移植性と細心の注意が必要ですが、ソースコードからのコンパイルが必要です。各プラットフォームで、Hadoopは移植性が高く、インストールが簡単で、非常に迅速でダーティなアプリケーション開発を可能にします。

それでも、おそらくhadoopの誇大宣伝の後には、おそらくMPIに基づく、よりリソース効率の高い代替手段が続くでしょう。

3
Kurt

MapReduce 2.0(MRv2)またはYARNでは、YARNの上にアプリケーションを記述(または実行するように移植)できます。

したがって、本質的には次世代のApache Hadoop MapReduce(MAPREDUCE-279)があり、その上で複数のプログラミングパラダイムをサポートする方法があります。したがって、YARNでMPI=アプリケーションを記述できます。MapReduceプログラミングパラダイムは、常にデフォルトでサポートされます。

http://wiki.Apache.org/hadoop/PoweredByYarn Open MPIを含むすべてのアプリケーションがYARN上で開発されているものについてのアイデアを提供する必要があります。

1
varunthacker

Map/ReduceステップとHadoopの一部をスケジュールするだけの場合、MPIははるかに優れた方法論/テクノロジーです。MPIは多くをサポートしていますブロードキャスト、バリア、すべて収集、散布/収集(またはマップリデュースと呼ぶ)などのさまざまな交換パターンですが、HadoopにもHDFSがあります。これにより、データを処理ノードのより近くに配置できます。問題空間Hadoopに似たテクノロジーを使用した場合、削減ステップの出力は実際にはかなり大きく、その情報をすべてネットワークに押し付けたくはありません。そのため、Hadoopはすべてをディスクに保存します。ただし、制御メッセージにはMPIを使用し、MPIメッセージには、ディスク上の実際のデータへのポインタ(URLまたはファイルハンドル)のみを含めることができます...

1
Lars Fiedler