# MapReduce ## 定義 MapReduceとは、大規模データセットを複数マシンに分散処理させるためのバッチ処理アルゴリズムであり、Googleが2004年に発表した。入力ファイルをレコード単位に分割し、(1) マッパー関数が各レコードからキーとバリューを抽出し、(2) フレームワークが全キー・バリューペアをキーでソートし、(3) リデューサ関数がソート済みのキー・バリューペアをキーごとにまとめて処理する、という3段階からなる。ソートはMapReduceに暗黙に組み込まれており、開発者が明示的に実装する必要はない。Hadoop・CouchDB・MongoDBなどのオープンソースデータシステムに実装され、「ビッグデータ」ムーブメントを牽引したが、Spark・Flinkのようなデータフローエンジンの登場後は徐々に置き換えられ、Googleでは既に社内利用が終了している。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]] "MapReduce") ## マッパーとリデューサ - **マッパー**: 入力レコードごとに1回呼び出され、キー・バリューのペアを0個以上生成する。前のレコードからの状態を保持せず、各レコードを独立に処理するため、多数のマッパーを異なる入力分割に対して並列実行できる。 - **リデューサ**: マッパーが生成したキー・バリューペアのうち同一キーに属する値をまとめ、そのキーの値集合に対するイテレータを受け取って呼び出される。異なるキーに対するリデューサも並列実行できる。 第2のソートステージが必要な場合(例: URLをリクエスト数でランク付け)は、1つ目のジョブの出力を入力とする2つ目のMapReduceジョブを書く。この構図では、マッパーはデータをソートに適した形へ準備する役割、リデューサはソート済みデータを処理する役割を担う。生のMapReduce APIで複雑な処理(ジョインアルゴリズム等)を実装するのは労力が大きく、また中間データをファイルI/Oで受け渡すためジョブのパイプライン化ができず、Spark・Flinkのようなデータフローエンジンより低速になる。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]] "MapReduce") ## 横断的知見 - **並列データベース研究者から「大きな後退」と批判されたアーキテクチャが、後に自らも高水準クエリ言語・コストベースオプティマイザへ収斂した**: DDIA第11章が参照するDeWitt and Stonebraker "MapReduce: A Major Step Backwards"(2008)は、並列データベースが1980年代から持っていたスキーマ・インデックス・宣言的クエリ言語・コストベース最適化をMapReduceが欠くと批判した。[[並列データベース]]が体系化するDeWitt/Gray(1992)のパイプライン並列化・パーティション並列化という分類に照らすと、MapReduceは低水準の力任せなパーティション並列化に留まる実装だったといえる。しかし本章が描くとおり、MapReduce後継のデータフローエンジン(Spark・Flink)やクラウドデータウェアハウスは結局SQL・DataFrame API・コストベースオプティマイザを採用し、批判が指摘した機能へ収斂した。「新しい低水準モデルが登場し、成熟する過程で旧世代の高水準機能を再獲得する」というパターンが、30年越しの並列データベース論争の顛末として観察できる。(Source: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]], [[並列データベース]]) ## 未解決の問い - MapReduceが「現在ではGoogle社内で使われていない」とされる一方、Hadoop等のオープンソース実装は今も一部の環境で稼働し続けている。稼働継続の理由(移行コスト、レガシーワークロード等)は本章の範囲外で、他ソースでの裏付けが必要。 - パイプライン化できないというMapReduceの制約は、具体的にどの程度のレイテンシ・スループット差としてデータフローエンジンとの間に現れるか(定量的なベンチマークは本章に記載がない)。 ## 関連 - ソース: [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]] - 概念: [[データフローエンジン]](MapReduceの後継) / [[シャッフルと分散結合]](MapReduceのソート・シャッフル機構) / [[並列データベース]](批判の出自) - 実体: [[Apache Spark]] / [[Apache Flink]] - 書籍: [[Designing Data-Intensive Applications 2nd Edition]] ## 出典 - [[@2026__OReilly__Designing Data-Intensive Applications 2E - Chapter 11 Batch Processing]]("MapReduce" 節)