MapReduce
Conceitos e Aplicações
Tiago Pedroso da Cruz de Andrade
Introdução
Introdução
• Com a evolução dos sistemas de informação e o aumento da
quantidade de serviços disponibilizados a seus usuários, cresce
também o volume de dados que precisam ser processados
pelos sistemas computacionais.
• Para que a computação dessa quantidade de informação seja
realizada em tempo viável, cada vez mais faz-se necessária a
exploração de paradigmas de programação paralela e processamento distribuído.
Introdução
• Porém, desenvolver software para ambientes distribuídos é
uma tarefa complexa, pois envolve uma série de conceitos e
problemas que devem ser considerados pelos programadores.
• A fim de facilitar este processo, foi desenvolvido o MapReduce,
um modelo de programação paralela para processamento
largamente distribuído de grandes volumes de dados.
Conceitos
Conceitos
• O paradigma de programação MapReduce inspira-se nas
primitivas Map e Reduce presentes em diversas linguagens
funcionais.
• Essa abordagem foi adotada pois verificou-se que, em muitos
casos, era necessário mapear fragmentos dos dados de entrada
a uma chave identificadora, e então processar todos os fragmentos que compartilhassem a mesma chave.
• Demonstrou ser adequado para trabalhar com problemas que
podem ser divididos ou fragmentados em subproblemas.
Conceitos
• É executado em cima de um cluster computacional de máquinas, que podem ser de prateleira ou não.
• Se a quantidade de dados for grande, pode ser dividido para a
execução de diversas funções Map ao mesmo tempo, em
paralelo.
• Podemos aplicar separadamente as funções Map e Reduce a
um conjunto de dados.
Conceitos
• Todo o trabalho de distribuição do sistema – incluindo
problemas de comunicação, tolerância a falhas, concorrência,
etc. – é abstraído, e fica a cargo do próprio framework.
• A tarefa principal do programador é implementar estas duas
funções, indicando como o mapeamento e a redução dos dados
serão compostos.
• O modelo MapReduce pode ser executado sobre uma variedade
de plataformas e ambientes distintos. Logo, a melhor
implementação do framework depende do ambiente alvo.
Conceitos
Modelo de Programação
Modelo de Programação
• A base de uma aplicação MapReduce consiste em dividir e
processar conjuntos de dados com o uso das funções Map e
Reduce.
• A função Map recebe uma tupla <chave,valor> como
entrada e gera um conjunto intermediário de dados, também
no formato <chave,valor>.
• A função Reduce também recebe como entrada uma tupla
<chave,valor>. Ela é executada para cada chave intermediária, com todos os conjuntos de valores intermediários
associados àquela chave combinados.
Modelo de Programação
• O processamento é dividido em três etapas:
– Uma etapa inicial de mapeamento, onde são executadas
diversas tarefas de mapeamento.
– Uma etapa intermediária, onde os dados são recolhidos das
tarefas de mapeamento, agrupados e disponibilizados para
as tarefas de redução.
– Uma etapa de redução onde são executadas diversas tarefas
de redução, agrupando os valores comuns e gerando a saída
da aplicação.
Modelo de Programação
Modelo de Programação
• Exemplo de aplicação:
– Considere o problema de contar o número de ocorrências de
uma palavra em uma grande coleção de documentos.
– A seguir será mostrado o pseudocódigo das funções Map e
Reduce.
Modelo de Programação
map(String key, String value):
// key: nome do documento
// value: conteúdo do documento
for each word w in value:
emitIntermediate(w, “1”);
Modelo de Programação
reduce(String key, Iterator value):
// key: uma palavra
// value: uma lista de contadores
int result = 0;
for each v in value:
result += parseInt(v);
emit(key, asString(result));
Modelo de Programação
• No pseudocódigo:
– Cada chamada da função Map recebe como entrada o
conteúdo de um dos documentos da coleção.
– Para cada palavra do documento de entrada, a função Map
emite o valor “1” associado à chave que representa a palavra
em questão.
– Cada chamada da função Reduce recebe como entrada uma
palavra e um iterador para todos os valores emitidos pela
função Map, associados com a palavra em questão.
– Todos os valores são então somados em uma tupla contendo
a palavra e seu total de ocorrências.
Arquitetura
Arquitetura
• O MapReduce é realizado em um cluster computacional
constituído por basicamente dois tipos de nós: Mestre e
Escravo.
• O nó Mestre tem como função atender requisições de execução
efetuadas pelos usuários e gerenciá-las, criando várias tarefas e
delegando-as aos nós Escravos.
• Os nós Escravos, por sua vez, são encarregados de executar de
fato essas tarefas, aplicando de acordo com seu tipo as função
Map ou Reduce definidas pelo usuário.
• Também é usado um sistema de arquivos distribuído.
Etapas do Processo
Etapas do Processo
• O primeiro passo do MapReduce é dividir os dados em partes e
iniciar uma série de cópias do programa nas máquinas do
cluster computacional.
Etapas do Processo
• Uma destas cópias é o Mestre e as outras são todas Escravos.
Etapas do Processo
• O trabalho consiste em realizar X tarefas de mapeamento e Y
tarefas de redução, sendo o Mestre responsável por atribuir aos
Escravos essas tarefas.
Etapas do Processo
• O Escravo para o qual foi atribuída uma tarefa de mapeamento
deve ler o conteúdo de uma parte do arquivo, separar todas as
tuplas e enviar para a função de mapeamento. As tuplas
produzidas pela função de mapeamento são armazenadas em
memória.
Etapas do Processo
• Periodicamente, as tuplas armazenadas em memória são
escritas em disco. Para isso é usado o sistema de arquivos
distribuído.
Etapas do Processo
• Os Escravos para os quais foram atribuídas tarefas de redução
devem pegar todos os valores de uma determinada chave, que
foi produzido pelas tarefas de mapeamento, e enviar para a
função de redução.
Etapas do Processo
• Quando todas as tarefas de mapeamento e redução forem
concluídas, o Mestre acorda o programa do usuário e retorna o
controle para ele.
Tolerância a Falhas
Tolerância a Falhas
• Escravos:
– O Mestre detecta falhas através de pings periódicos.
– As tarefas de mapeamento são reexecutadas – tanto as em
progresso quanto as concluídas.
– As tarefas de redução em progresso são reexecutadas.
Tolerância a Falhas
• Mestre:
–
–
–
–
Possui um único Mestre e sua falha é indesejável.
Necessita de um controle mais complexo.
Executa checkpoints periódicos.
Uma nova instância pode ser criada a partir dos checkpoints.
Conclusão
Conclusão
• Fácil de usar, mesmo por programadores sem experiência em
processamento distribuído.
• Permite o programador focar no problema e esquecer os
detalhes.
• Uma grande variedade de problemas podem ser expressos em
MapReduce.
• Simplificou computações em larga escala de grandes volumes
de dados.
Referências
Referências
1. “MapReduce: Simplified data processing on large clusters”
2. “The Google File System”
3. “Evaluating MapReduce for multi-core and multiprocessor
systems”
4. “A dynamic
workloads”
MapReduce
scheduler
for
heterogeneous
in
heterogeneous
5. “Hadoop: The Definitive Guide”
6. “Improving MapReduce
environments”
performance
Download

slides