mapreducemapreduceを使い始める


備考

このセクションでは、mapreduceの概要と、開発者がそれを使用する理由について概要を説明します。

また、mapreduce内の大きなテーマについても言及し、関連するトピックにリンクしてください。 mapreduceのドキュメンテーションは新しいので、これらの関連トピックの初期バージョンを作成する必要があります。

インストールまたはセットアップ

MapreduceはHadoopの一部です。したがって、 Apache Hadoop (またはHadoopの任意のディストリビューションがインストールされている場合)が自動的にインストールされます。

MapReduceはHDFS(Hadoop分散ファイルシステム)上のデータ処理フレームワークです。 MRジョブは、Java、Python、Scala、Rなどを使用して記述できます。

mapreduceのやり方とは?

Mapreduceは(非常に)大量のデータを処理するプログラミングモデルです。

従来の「HPC」(ハイパフォーマンスコンピューティング)は、高度に接続されたコンピュータ(非常に高速なネットワーキング、共有ストレージへのクイックアクセス、共有メモリを使用)を作成することで比較的大量のデータを高速に計算します。通常、相互のデータにアクセスするための計算が必要です。典型的な例は天気予報です。

一方、Mapreduceは膨大な量のデータに対して比較的小さな独立した計算を処理するのに優れています。これを可能にするために、データは(データ量のために)多くのコンピュータに分散され、必要な計算はデータの各ビットで独立して実行できるフェーズ(「マップ」フェーズ)に分割されます。これらの独立した計算の結果が集められ、これらの個々の結果すべてを最終結果(「減少」段階)に組み込むために、計算の第2部分が行われる。


例:投票数を数える

カウントする投票数が非常に多いと仮定し、各投票を数える作業があります(たとえば、スキャンされた画像からどのボックスがチェックされているかなど)。

この場合、マップリダクションの実装は次のようになります。

ステップ1:「スプレッド」

利用可能なコンピュータ上で処理するように画像を広げる。

ステップ2:「地図」

各コンピュータで、それぞれのイメージに対して:

  • このコンピュータにコピーされた1枚の画像を入力として取り込む
  • どのボックスにチェックが入っているかを調べる
  • 投票されたアイテムの番号(またはコードまたは名前)を出力する

コンピュータが1つのイメージを取得するとすぐに作業を開始できることに注意してください。これらのすべてのコンピュータが作業を行うためにやりとりする必要はないため、すぐに相互に接続したり、共有メモリを共有したり、ディスクスペースを共有したりする必要はありません。

ステップ3: 'ギャザー'

これらのすべての出力を1台のコンピュータで収集します。

ステップ4: 'Reduce'

各番号(またはコードまたは名前)の投票数を数えます。

この非常に基本的な例は、さらに最適化がしばしば可能であることを強調しています。この場合、削減ステップ自体を各コンピュータで部分的に行うことができ、最終的な削減を中央コンピュータで行うことができます。これにより、reduceステップを実行している1台のコンピュータの作業量が削減され、ネットワーク経由で転送する必要のあるデータ量が制限されます。


例:投票集計 - 最適化(コンバイナを使用)

ステップ1:「スプレッド」

前と同じ:利用可能なコンピュータ上で処理するように画像を広げます。

ステップ2:「地図」

前と同じ:各コンピュータで、各画像について:

  • このコンピュータにコピーされた1枚の画像を入力として取り込む
  • どのボックスにチェックが入っているかを調べる
  • 投票されたアイテムの番号(またはコードまたは名前)を出力する

ステップ3:ローカルで収集する

1台のコンピュータのすべての出力をコンピュータ自体に集める。

ステップ4:ローカルで「減らす」

ローカルの結果に各番号(またはコードまたは名前)の投票数を数え、これらのカウントを出力します。

ステップ5:グローバルに収集する

1台のコンピュータでローカルリダクションのすべての出力を集める。

ステップ6:グローバルに「減らす」

それぞれの番号(またはコードまたは名前)のローカルに作られた投票数を合計します。


手順3では、以下のいずれかの場合にすべての結果を待つ必要はありません

  • これがストレージ/メモリのようなコンピュータのローカルリソース
  • コンピュータが故障したときにやり直す作業のコストは、すべてのローカル結果を待つために大きいとみなされます
  • ネットワークが中間結果を自由に運ぶことができる場合

ローカル収集とローカル削減は、ローカルコンピュータ上でこれまでに作成された結果で実行できます。これはいつでも実行できます。

局所的な縮小ステップは結合ステップと呼ばれる。これは、パフォーマンスを向上させるためのオプションのステップです。