Paradigma de programação distribuída para gerir Grandes Dados.
MapReduce começa com uma fase de mapeamento em que são lidos blocos de dados, distribuídos por um grande número de computadores, e deles é extraída a informação desejada sob a forma de pares (chave, valor), que fica também armazenada localmente (fase de mapeamento). A seguir, os dados assim formatados são organizados em blocos, cada um deles contendo todos os pares com a mesma chave, ficando em princípio armazenados num computador único. Finalmente, a fase de redução, que é sempre posterior à de mapeamento, transforma a coleção de pares (chave, valor) numa coleção mais pequena.
Exemplo: Admitamos que um meteorologista pretende conhecer as temperaturas máximas nas capitais europeias durante um certo período, a partir de valores armazenados em vários computadores. A primeira tarefa consiste em ler ficheiros desses computadores e extrair de cada um deles pares (nome da cidade, temperatura registada).
Numa situação de um agrupamento com três computadores, poderíamos obter os seguintes registos (fase de mapeamento):
Computador 1: (Lisboa, 19); (Paris, 15); (Lisboa 20); (Madrid, 15); (Roma, 20).
Computador 2: (Lisboa, 17); (Paris, 16); (Roma, 22); (Madrid, 17).
Computador 3: (Paris, 16); (Lisboa, 18); (Paris, 14); (Lisboa, 17); (Madrid, 15).
A seguir esta informação é transferida, em princípio, para um único computador central onde é reorganizada em blocos, ficando todos os registos com a mesma chave (cidade) no mesmo bloco:
Bloco 1: (Lisboa, 19); (Lisboa, 20); (Lisboa, 17); (Lisboa, 18); (Lisboa, 17).
Bloco 2: (Madrid, 15); (Madrid, 17); (Madrid, 15).
Bloco 3: (Paris, 15); (Paris, 16); (Paris, 16); (Paris, 14).
Bloco 4: (Roma, 20); (Roma, 22).
Na fase de redução extrai-se de cada um destes blocos o par que tenha maior valor de temperatura obtendo-se:
(Lisboa, 20) (Madrid, 17) (Paris, 16) (Roma, 22)