データエンジニアとして、おそらくHadoopについて聞いたことがあるでしょう。これは大規模なデータセットの分散処理において最も人気のあるフレームワークの一つです。他のフレームワークよりもコストが低く、安全性も高いです。その中心にはMapReduceというプログラミングモデルがあります。今日はHadoopの内部構造を理解するためにMapReduceを詳しく見ていきます。
名前の通り、MapReduceには主に2つのステップがあります:MapとReduceです。これら2つのステップに加えて、3つの中間ステップがあります:Combine、Partition、shuffleです。ドキュメントのワードカウントレポートを作成するデータ処理タスクの例を挙げてみましょう。シンプルにするために、ソースドキュメントは3行のみで構成されており、それぞれ3語ずつです。

分割分割ステップでは、Hadoopは入力データをより小さなチャンクに分割します。このステップは、その後の並列処理を容易にするために、データを個々のマップノードに分散させることを目的としています。例では、Hadoopはソースドキュメントを3つのチャンクに分割し、それぞれにソースドキュメントの1行を含みます。

マップマップのステップでは、Hadoopは各データチャンクを処理するマッパーを割り当てます。各マッパーの計算結果はキー-値ペアのリストです。例では、Hadoopは合計3つのデータチャンクがあるため、3つのマッパーを割り当ててデータチャンクを処理します。各マッパーは3つのキー-値ペアを生成します。各キー-値ペアの値は1であり、各単語がスコープ内で正確に1回だけ現れることを示します。

結合結合(Combiner)ステップは、コンバイナーを使用する任意のステップです。コンバイナーは本質的に、マッパー上で個別に動作するリデューサーです。さらに、各マッパーのデータをより簡略化して簡略化し、後のステップでの計算(通常は同一キーに対応する値を組み合わせることで実現)を容易にします。例として、HadoopのCombineステップが関与していると仮定しましょう。2番目のマッパーでは、同じキー「orange」を持つ2つのキー値ペアがあります。したがって、それらを1つにまとめて値を合計すると{"orange": 2}となり、これは2番目のマッパーに「orange」という単語が2回現れたことを示します。他のすべてのマッパーには同じキーを持つキー-値ペアは含まれていません。したがって、それらに対して組み合わせは行われません。

シャッフルシャッフルシャッフルステップでは、Hadoopはマッパーによって生成されたキー-値ペアを対応するリデューサーに送信します。同じキーを持つキー-値ペアは同じリデューサーに送られます。例では4つの異なるキーがあるため、Hadoopは4つのリデューサを生成します。各リデューサは1つのキーを担当し、そのキーでキー-値ペアのみを受け取ります。例えば、3番目のリデューサーはキー「orange」のキー-値ペアのみを受け取ります。

リデュースでは、各リデューサーが割り当てられたキー-値ペアを統合し、各キーの最終出力を生成します。例では、各リデューサがキー-バリューペアの値を加算して各単語の最終カウントを計算します。例えば、3番目のリデューサーは{"orange": 2}と{"orange": 1}を{"orange": 3}に縮小し、「orange」という単語が文書内で合計3回登場したことを示します。

リデュースステップの後、Hadoopはすべてのリデューサーの出力を組み合わせて最終結果を生成します。私たちの場合、最終結果は{"Apple": 2, "Banana": 2, "Orange": 3, "Pear": 2}です。

簡単に言うと、MapReduceは5つの主要なステップで構成されています:分割、マッピング、結合、シャッフル、リデュースです。これらのステップは個別には簡単な作業しか行いませんが、Hadoopが大量のデータを効率的に処理できるようにしています。この記事がMapReduceの内部構造をより深く理解する助けになれば幸いです。