Reduceフェーズでは、キーとそれらの個々の値リストを使用して、通常はクライアントアプリケーションに返されるものがキーと値のペアのセットとなるようにします。これまでのところ、大規模なデータセットは 入力スプリットと呼ばれる小さな部分に分割されており、マッパータスクの個々のインスタンスがそれぞれを処理しました。 場合によっては、この単一の処理フェーズは、必要なアプリケーション出力を生成するために必要なすべてです。たとえば、すべてのテキストを大文字に変換するなど、データの基本的な変換操作を実行している場合や、ビデオファイルからキーフレームを抽出している場合は、孤独な段階が必要です。 (これは、地図上の
ジョブとして知られています。) <! - 1 - > しかし、他の多くのケースでは、マッパータスクが出力を書いたときに仕事は半分しか行われません。残りの作業は、すべての中間結果を単一の統一された回答に煮沸しています。
各レコードを1つずつ処理するマッパータスクと同様に、レデューサーは各キーを個別に処理します。通常、レデューサーは処理するすべてのキーに対して単一のキーと値のペアを返します。ただし、これらのキーと値のペアは、必要に応じて膨大なものや小さなものにすることができます。<! - 2 - >
レデューサータスクが終了すると、それぞれが結果ファイルを返し、HDFS(Hadoop Distributed File System)に保存します。ここに示すように、HDFSシステムはこれらの結果を自動的に複製します。
リソースマネージャー(またはHadoop 1を使用している場合はJobTracker)は、入力分割がローカルで処理されるようにリソースをマッパータスクに割り当てることを最善に試みますが、減速タスクの戦略はありません。マッパータスク結果セットは、減速タスクによって処理されるネットワークを介して転送される必要があると仮定される。<!これは合理的な実装である。なぜなら、数百または数千のマッパータスクでは、減速タスクが同じローカリティの優先順位付けを行うための実用的な方法がないからである。