私は最近、GoogleのMapReduceに出くわしました。
説明/ドキュメントを2回読みましたが、それが正確に何であるか、いつ使用するかがまだわかりません。
どうもありがとうございます。
mapreduceの優れた説明は次のとおりです。
Google App Engineは、App EngineでMapReduceジョブを実行するためのAPI(JavaおよびPython)を提供します。すべてのソースコード(スケジューラー、ジョブトラッカー、タスクトラッカーなどのモジュール)を表示することはできませんが、API(マッパー、レデューサー、パーティショナーなどを含む)のソースコードを表示することはできます。GAEには、アプリケーションをテストできるソフトウェア開発キット(SDK)も用意されています。アプリのパフォーマンスに満足したら、GAEにアップロードして、誰でもアクセスできるようにします。
私はそのようなアプリを1つ作成しました。これは、shaileshmapreduce.appspot.comにあります。Gmail IDをユーザーリストに追加する必要があるため、MapReduceジョブを実行することはできませんが、インターフェイスとすべてをチェックすることができます。
MapReduceデモを試すこともできますhttps://developers.google.com/appengine/docs/python/dataprocessing/helloworld
もちろん、SDKと必要なMapReduceライブラリがマシンにインストールされていることを確認する必要があります。
データの並列処理が必要な場合。
Map Reduceフレームワークは、複数のCPUを必要とする重い計算が必要な場合に使用する必要があります。マップリデュースでは、最初にタスクが独立したチャンクに分割されます。次に、これらのチャンクは個別に計算されます。すべてのチャンクが計算されると、結果が組み合わされて最終出力が得られます。一般的な例の1つは、機械学習です。係数ベクトルを計算するための多くの計算は個別に実行でき、結果をまとめることができます。つまり、CPUが複数ある場合は、map reduceの使用のみを検討してください。そうしないと、意味がありません。
ウィキペディアを引用させてください:
MapReduceは、クラスターまたはグリッドと総称される多数のコンピューター(ノード)を使用して、巨大なデータセット全体で高度に分散可能な問題を処理するためのフレームワークです。計算処理は、ファイルシステム(非構造化)またはデータベース(構造化)のいずれかに格納されているデータに対して実行できます。
この質問はよく答えられましたが、私が何かを追加すると思いました。問題の核心は、map-reduce自体が理解されていないということだと私には思えます。Googlemap-reduceは1つの実装にすぎません。Hadoopやあらゆる種類のものもあります。map-reduceのhelloworldの概要は次のとおりです。
あなたが本を持っていて、各単語の単語数を計算したいとします。これを行う1つの方法は次のとおりです。
word_dict = {}
for line in book_file_handler:
for word in line.split():
word_dict[word] = word_dict.get(word,0)+1
これは、句読点が何であるかという理由で、少し単純化しすぎています。
したがって、このコードは機能します。光沢のあるクラスターを利用して、非常に高速に実行したい場合はどうでしょうか。計算に参加している各コンピューターに本のセクションを送信し、各コンピューターにいくつかの単語をカウントさせてから、結果を組み合わせるとよいでしょう。これが可能なのは、本の各行が他のすべての行から独立しているためです。そして、それはmap-reduceの目的です:
操作の結果が他のオブジェクトの結果に依存しないように、多くの独立したオブジェクトに対して同じ操作を実行する必要があるアルゴリズムがある場合は、map-reduceが適切です。