O problema pode ser resolvido eficientemente usando a computação distribuída?
Se a resposta a esta pergunta for sim, você tem um problema de candidato para o MapReduce. Isso ocorre porque o padrão do problema se presta a ser dividido em pequenos problemas isolados.
Sua tarefa: analisar este livro
Um exemplo funciona bem para ilustrar isso. Você tem um grande documento (Moby Dick, de Herman Melville, ) e seu trabalho é realizar uma análise de freqüência. de todas as palavras usadas nele.
A abordagem sequencial
Você pode fazer isso sequencialmente, obtendo sua máquina mais rápida (você tem muito por aí) e correndo sobre o texto do começo ao fim, mantendo um mapa de cada palavra que você encontrar (a chave) e incrementando a freqüência ) toda vez que você analisar uma palavra. Simples, direto e lento.
A abordagem do MapReduce
Aproximando-se disso de uma perspectiva diferente, você percebe que tem todas essas máquinas de reposição por aí e pode dividir essa tarefa em partes. Dê a cada máquina um bloco de texto de 1Mb para analisar em um mapa de hash e, em seguida, agrupe todos os mapas de hash de cada um em um único resultado. Esta é uma solução MapReduce em camadas.
O processo de ler uma linha de texto e reunir as palavras é a fase do Mapa (você cria um mapa simples representando as palavras na linha com sua frequência 1,2,3 etc), então a fase Reduzir é quando cada máquina agrupa seus mapas de linha em um único mapa agregado.
A solução global vem de uma outra fase Reduzir, onde todos os mapas agregados são agregados (essa palavra novamente) em um mapa final. Ligeiramente mais complexo, maciçamente paralelo e rápido.
Resumo
Então, para resumir, se o seu problema se presta a ser representado por chaves, valores, agregue operações nesses valores de forma isolada, então você tem um problema de candidato para o MapReduce.