MapReduceは、大きく分けて、データを抽出するmapフェーズと、mapされた情報を集約するreduceフェーズの 2つのフェーズにわかれます(図1)。
MapReduceの処理単位をジョブと言いますが、1つのジョブは多数のmapタスクとreduceタスクに分解され、できるかぎり別々のノードで並列に実行されます。dddでは、第3回の説明(http://thinkit.jp/article/1030/2/)の通り、ストレージ部分は分散キーバリューストアとなっています。MapReduceジョブはキー単位にmapタスクに分解され、各mapタスクはキーに対応するデータを保持しているノードに対して割り当てられます。
まず、mapフェーズでは、分散ストレージのデータの中から必要な情報を抽出し、後の処理がしやすい形に変換します。
各mapタスクの結果は、一定の規則に基づいてreduceを実行するノードに振り分けられ、reduceタスクはその結果を集約します。集約した結果は分散ストレージに書き出すか、またはジョブをリクエストしたクライアントに返します。
この流れは、分散処理であることを除けばUnixでのフィルタやパイプラインによる処理に似ています。mapフェーズは、入力データからgrepやcutコマンドなどで抽出することに相当し、reduceフェーズはそれをパイプライン経由で受け取って、sortしてuniq -cすることなどに例えることができるでしょう。