MapReduce é um modelo de programação utilizado no processamento de grandes volumes de dados. Seu sucesso é decorrente do uso facilitado para processar dados de forma distribuída. Em seu uso, o usuário precisa especificar uma função de Map para gerar os pares de chave/valor. Além disso, torna-se necessário definir a função de Reduce para juntar os valores intermediários processados associados a uma mesma chave. Qual das seguintes ferramentas implementa esse modelo de programação?