MapReduceとは?仕組み・ワードカウントの具体例と今の立ち位置を解説

MapReduceとは、Googleが2004年に考案した、大規模なデータを多数のサーバーに分散して並列にバッチ処理するためのプログラミングモデルです。処理を「Map(各データを整形してキーと値を出す)」と「Reduce(キーごとに集約する)」という2つの単純な関数に分けて書くだけで、何千台ものマシンへの分配・障害時の再実行を基盤側が肩代わりしてくれる点が本質にあります。この記事では、Map・Shuffle・Reduceの3段階の仕組みをワードカウントの具体例で追い、混同されやすいHadoopとの違い、そしてApache Sparkに主役を譲った現在の立ち位置と「今から使うべきか」までを整理します。

まとめ

  • 定義:MapReduceは、大規模データを分割して並列処理し結果を集約する分散バッチ処理モデル。2004年のGoogleの論文が原典。
  • 仕組み:Map(キーと値のペアを生成)→ Shuffle&Sort(同じキーを集める)→ Reduce(キーごとに集約)の3段階。Shuffleの存在が2段階説明で抜けやすい要点。
  • Hadoopとの違い:MapReduceは「処理モデル(アルゴリズム)」、Hadoopはそれを動かす「フレームワーク」。両者はイコールではない。
  • 現在地:Google自身は2014年に社内利用をやめ、Hadoopエコシステムでも新規開発の主役はApache Spark。MapReduceはレガシー技術と位置づけられる。
  • 使いどころ:反復計算やリアルタイム性が要るならSpark/Flink。既存資産の保守や、一度きりの超大規模バッチで枯れた安定性を優先する場面に限られる。

以下、各ポイントを仕組みと具体例から順に見ていきます。

MapReduceとは何か:定義と解決した課題

MapReduceは、Googleのジェフ・ディーン(Jeffrey Dean)とサンジェイ・ゲマワット(Sanjay Ghemawat)が2004年の論文「MapReduce: Simplified Data Processing on Large Clusters」で発表した処理モデルです。名前は関数型プログラミングのmapreduceに由来します。プログラマは「各データをどう整形するか(Map)」と「同じキーの値をどうまとめるか(Reduce)」だけを書けばよく、データの分割・多数のマシンへの配分・故障したマシンの処理の再実行といった分散処理の難所は、実行基盤が自動で引き受けます。

Map・Shuffle・Reduceの3ステップ

MapReduceは「MapとReduceの2段階」と説明されがちですが、両者の間にはShuffle&Sort(シャッフル)という重要な中間工程があります。正確には次の3段階です。

  • Map:入力データを分割し、各断片を並列に処理して「キーと値のペア」を出力する。
  • Shuffle&Sort:全Mapの出力を、同じキーの値が同じReducerに集まるよう並べ替えて転送する。ネットワーク負荷が集中しやすく、MapReduceの性能を左右する工程。
  • Reduce:キーごとに集約された値を受け取り、合計・件数・最大値などの最終結果を計算する。

この「同じキーを1か所に集めてから畳み込む」という発想が、台数を増やすほど処理が速くなるスケーラビリティの源泉です。

分散処理の課題を解決するために生まれた背景

分散処理とは、1つの処理を複数のコンピュータに分けて同時に実行する方式です。データ量がテラバイト級・ペタバイト級に達すると、1台のサーバーを高性能化する(スケールアップ)だけでは限界がきます。かといって数百台に処理を手で割り振ろうとすると、どこにデータを置くか、途中で1台壊れたらどうするか、といった配線が膨大になります。MapReduceはこの配線をモデル側に閉じ込め、開発者が並列処理の詳細を意識せずに大規模データを扱えるようにした点に功績があります。安価な汎用サーバーを横に並べる(スケールアウト)だけで処理能力を伸ばせる設計は、その後のビッグデータ処理の考え方の土台になりました。

ワードカウントで見るMapReduceの処理の流れ

MapReduceの定番の例が、大量の文章から単語の出現回数を数える「ワードカウント」です。apple banana apple という入力を例に、データがどう変換されるかを追います。

入力       : "apple banana apple"

Map出力    : (apple, 1) (banana, 1) (apple, 1)
             ※単語をキー、1を値にしたペアを並列生成

Shuffle後  : (apple, [1, 1]) (banana, [1])
             ※同じキー(apple)の値をひとまとめに集約・整列

Reduce出力 : (apple, 2) (banana, 1)
             ※キーごとに値を合計して最終結果

Mapは単語を切り出して「(単語, 1)」を吐くだけの単純な処理で、入力が何億行あっても行ごとに独立しているため何台でも並列化できます。集計の本体はReduceが担い、Shuffleが両者を橋渡しします。合計をSUM、平均をAVG、重複排除をDISTINCTに置き換えれば、ログ集計やアクセス解析など多くのバッチ集計がこの同じ型に収まります。

MapReduceとHadoopの違い

MapReduceとHadoopは同一視されがちですが、層が異なります。MapReduceは処理の考え方(プログラミングモデル)であり、Hadoopはそれを実際に動かすためのフレームワーク(実装・実行環境)です。Googleの論文は仕組みを示しただけで、その考え方をオープンソースで実装したのがApache Hadoopでした。

Hadoopは大きく3つの部品からなります。データを多数のサーバーに分散して保存するHDFS、CPU・メモリを割り当てる資源管理のYARN、そしてその上でMapReduceジョブを実行するエンジンです。つまりMapReduceは「何をするか」、Hadoopは「どこに置き、どう配り、どう動かすか」を受け持ちます。クラウドでは、このHadoop環境をマネージドで提供するAmazon EMRのようなサービスを使えば、自前でクラスタを構築せずに大規模データ処理を回せます。

MapReduceとApache Sparkの比較:今から使うべきか

MapReduceを学ぶうえで避けて通れないのが、後発のApache Sparkとの関係です。結論から言えば、新規のデータ処理でMapReduceを第一候補に選ぶ場面はほぼ残っていません。

なぜSparkやFlinkに主役を譲ったのか

最大の理由は速度です。MapReduceはMap→Reduceの各段階で中間結果をいちいちディスク(HDFS)に書き出すため、機械学習のように同じデータを何度も回す反復処理では入出力が重くのしかかります。対してSparkは中間データをメモリ上に保持でき、インメモリ処理によりMapReduce比で最大100倍高速(Sparkの公表値。反復処理で特に顕著)とされます。考案元のGoogleさえ、2014年のGoogle I/Oで「我々はもうMapReduceをほとんど使っていない」と述べ、より柔軟な後継基盤(Flume・MillWheelを基にしたCloud Dataflow系)へ移行済みであることを明らかにしました。現在では、バッチとストリームを一体で扱うApache Flinkや、Sparkの処理をGPUで加速するAccelerator for Apache Sparkのように、後継の選択肢が層を成しています。

MapReduceを今も選ぶ場面・避けるべき場面

それでもMapReduceが無意味になったわけではありません。既にHadoop MapReduceで組まれた資産の保守や、リアルタイム性が不要で一度きりの超大規模バッチを、枯れた安定性で確実に流したい場面では今も現実的な選択肢です。HDFSとYARNは依然として現役で、その上でMapReduceジョブは問題なく動きます。

逆に、反復計算を伴う機械学習、対話的な分析クエリ、秒単位の応答が要るストリーム処理を新規に作るなら、MapReduceは避けるべきです。これらはSparkやFlinkが得意とする領域で、開発生産性・実行速度の両面でMapReduceに勝ち目はありません。バッチとリアルタイムを併存させたい場合は、両者を組み合わせるLambdaアーキテクチャのような設計や、処理の依存関係を管理するApache Airflowなどのワークフロー基盤とあわせて検討するのが定石です。

よくある質問

MapReduceとはどういう意味ですか?

大規模データを多数のサーバーに分割して並列処理し、結果を集約する分散処理モデルを指します。処理を「Map(整形)」と「Reduce(集約)」に分けて記述する点が名前の由来で、Googleが2004年に発表しました。

MapReduceの仕組みは?

Mapでデータからキーと値のペアを生成し、Shuffle&Sortで同じキーの値を集め、Reduceでキーごとに集約して結果を出します。開発者はMapとReduceの処理内容だけを書き、分割や障害時の再実行は基盤が自動で行います。

MapReduceとHadoopの違いは何ですか?

MapReduceは処理の考え方(プログラミングモデル)、Hadoopはそれを動かすフレームワークです。HadoopはHDFS(分散ストレージ)とYARN(資源管理)を備え、その上でMapReduceジョブを実行します。両者はイコールではありません。

MapReduceは今でも使われていますか?

新規開発の主役ではありません。Google自身が2014年に社内利用を終え、Hadoopエコシステムでも中心はApache Sparkへ移りました。既存資産の保守や大規模バッチには使われますが、レガシー技術という位置づけです。

MapReduceはPythonで書けますか?

書けます。Hadoop本体はJavaですが、標準入出力を介して任意の言語のスクリプトを使える「Hadoop Streaming」や、Python向けのmrjobライブラリを使えばPythonでMap・Reduce処理を記述できます。ただし新規に書くなら、PySparkでSparkを使うほうが速く簡潔です。

関連記事

資料請求

RELATED POSTS 関連記事