MapReduce

MapReduce

MapReduceとは

MapReduce(マップリデュース)とは、大規模データを複数のマシンで分散処理するためのプログラミングモデルです。Googleが2004年に発表した論文で提唱し、ビッグデータ処理の基礎となりました。Map(写像)とReduce(集約)の2つのステップでデータ処理を表現します。

表:MapReduceの要点まとめ
ひとことで言うと大量データを「分けて処理→まとめる」の2段階で分散処理する考え方。
たとえると全国の店舗ごとに売上を集計させ(Map)、本社で合算する(Reduce)。
注意点段階ごとにディスクに書くため遅い。現在はSparkが主流。

MapReduceの仕組み

Mapフェーズでは、入力データを複数のチャンクに分割し、各チャンクに対して同じ処理(Map関数)を並列に適用してキーと値のペアを生成します。Reduceフェーズでは、同じキーを持つ値を集約し、最終的な結果を出力します。間にShuffleフェーズがあり、Mapの出力をキーでグループ化します。

図:MapReduceの2段階
1データを分割各ノードに配る
▶
2Map:個別に処理並列に集計
▶
3Shuffle:仕分けキーごとにまとめる
▶
4Reduce:集約最終結果を計算

MapReduceの利点

MapReduceの最大の利点は、プログラマが分散処理の複雑さ(データの分散、通信、障害復旧など)を意識せずに、Map関数とReduce関数を定義するだけで大規模な並列処理を実現できることです。フレームワークがデータの分割やタスクの割り当て、障害時の再実行を自動的に管理します。

MapReduceの限界と後継技術

MapReduceはディスクベースの処理のため、反復的な計算が必要な機械学習アルゴリズムなどには非効率です。この課題を解決するために、メモリ内処理を活用するApache Sparkが登場し、多くのユースケースでMapReduceに代わる存在となっています。