Apresentação desenvolvida por alunos do curso de Ciências da Computação, da Universidade Federal de Goiás, para a disciplina de Sistemas Distribuídos.
Título: MapReduce
Autores:
Diego Magalhães Cunha
Jorge Luiz de Faria Fernandes
Juliana Paula Félix
4. 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.
5. Introdução
• De acordo com a IDC (International
Data Corporation), a quantidade de
informação criada, capturada ou
replicada em meio digital no ano de
2009 apresentou um crescimento de
62% (em relação à média dos anos
anteriores), alcançando
aproximadamente 800.000 petabytes.
6. Introdução
• Já em 2010, este valor foi por volta de
1.2 milhões de petabytes. Para 2020 o
crescimento esperado deve alcançar os
35 zetabytes, equivalentes a 35
milhões de petabytes.
7. Introdução
• 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.
8. Introdução
• Porém, desenvolver softwares para
ambientes distribuídos é uma tarefa
complexa, pois envolve uma série de
conceitos e problemas que devem ser
considerados pelos programadores,
tais como:
o concorrência
o tolerância a falhas
o distribuição de dados
o e balanceamento de cargas.
9. Introdução
• A fim de facilitar este processo, a
multinacional Google desenvolveu o
MapReduce, um modelo de
programação paralela para
processamento largamente distribuído
de grandes volumes de dados.
10. Introdução
• Além do framework da Google,
diversas implementações para o
MapReduce foram desenvolvidas,
dentre as quais, a mais conhecida e
divulgada está inserida no projeto
Hadoop, mantido pela Apache Software
Foundation.
12. Processamento Distribuído
Clusters
• Um cluster pode ser definido como um
conjunto de máquinas, administrado e
utilizado por um único indivíduo, com o
objetivo de solucionar problemas que
levariam muito tempo (de
processamento) em uma única estação
de trabalho.
13. Processamento Distribuído
Clusters - Características
• constituído por máquinas de prateleira (baixo
custo);
• nós geograficamente próximos, geralmente em
um mesmo prédio;
• conexões entre as máquinas possuem altas
taxas de transferências;
• máquinas são homogêneas, ou seja, possuem
capacidades de processamento similares;
17. Processamento Distribuído
Balanceamento de Carga
• O balanceamento de carga é uma
prática utilizada para atingir um
aproveitamento ótimo dos recursos do
sistema distribuído, através de uma
política de alocação de trabalho
coerente com a capacidade de
processamento dos dispositivos do
sistema, a fim de obter o mesmo nível
de esforço em todos os recursos.
21. MapReduce
Modelo
• O MapReduce, criado pela Google, é
um modelo de programação paralela
para processamento largamente
distribuído de grandes volumes de
dados. Seu objetivo é facilitar a
programação de aplicativos
distribuídos com este perfil.
22. MapReduce
Modelo
• Para tal, o modelo inspira-se nas
primitivas Map e Reduce presentes em
diversas linguagens funcionais, como
Lisp e Haskell, por exemplo.
23. MapReduce
Modelo
• 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.
24. MapReduce
Modelo
• Assim, a tarefa principal do
programador é implementar estas duas
funções, indicando como o
mapeamento e redução dos dados
serão compostos.
25. MapReduce
Modelo
• 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.
26. MapReduce
Modelo
• Durante a execução, as funções
recebem e emitem dados no formato
de pares <chave, valor>. Como o tipo
destes elementos dependem da
aplicação que será executada, cabe ao
desenvolvedor, também, definir estas
propriedades.
27. MapReduce
• Pseudocódigo que conta a quantidade de ocorrências
de cada palavra em um documento
28. MapReduce
Modelo
• No pseudocódigo, cada chamada da
função map recebe o número dessa
linha. Para cada palavra encontrada na
linha recebida, a função emite um par
chave/valor, onde a chave é a palavra
em si, e o valor é a constante 1 (um).
29. MapReduce
Modelo
• A função reduce, por sua vez, recebe
como entrada uma palavra (chave), 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 um par
chave/valor contendo a palavra, e seu
total de ocorrências é emitido.
31. MapReduce
Modelo
• Cada linha de texto gera uma chamada
à função map;
• Cada função map gera n pares <chave,
valor> intermediários (n palavras em
cada linha);
• Pares intermediários associados a uma
mesma chave são pasados para uma
função reduce;
32. MapReduce
Modelo
• Cada função reduce retorna a soma de
todos os valores presentes na lista de
pares recebida.
• Resultados são armazenados no
arquivo de saída.
33. MapReduce
Modelo
• frequência de acesso a URLs
o Map<URL; 1> / Reduce <URL, Total>
• grafo reverso de links web
o Map<Destino, Origem> / Reduce
<destino, lista(origem)>
• índice invertido
o Map<palavra, ID documento> / Reduce
<palavra, lista(ID documento)>
34. MapReduce
Modelo
• 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.
35. MapReduce
Visão Geral - Google
• As máquinas são constituídas de
múltiplos processadores x86 rodando
linux, com 2-4 GB de memória;
• Hardwares de redes usados são
geralmente ou 100Mbit/s ou 1Gbit/s no
nível da máquina;
• Centenas ou milhares de máquinas
(falhas de máquinas são comuns);
36. MapReduce
Visão Geral - Google
• Armazenamento em discos locais IDE;
• Sistema de arquivos distribuído gerencia os
dados (GFS);
• Usuário implementa as funções map e reduce
• A implementação fragmenta o arquivo de
entrada em blocos de 64MB (tamanho do bloco
do GFS), e armazena cópias de cada bloco em
diferentes máquinas.
37. MapReduce
Visão Geral - Google
• Usuários submetem jobs (conjunto de
tarefas) para o master;
• Master escalona tarefas para os
workers.
39. MapReduce
Arquitetura
• Uma implementação feita para utilizar
a GPU de uma máquina, por exemplo,
provavelmente será beneficiada por
um comportamento distinto a uma
implementação destinada a um grande
cluster.
40. MapReduce
Arquitetura
• O Google MapReduce foi desenvolvido
para grandes clusters de máquinas de
prateleira, interligadas por uma rede
do tipo switched Ethernet, e é
constituído por basicamente dois tipos
de nós: Master e Worker (denominados
Mestre e Trabalhador em português,
respectivamente).
42. MapReduce
Arquitetura
• O nó mestre tem como função atender
requisições de execução (jobs)
efetuadas pelos usuários, e gerenciá-
las, criando variáveis tarefas (tasks) e
delegando-as aos nós trabalhadores;
43. MapReduce
Arquitetura
• Os trabalhadores por sua vez são
encarregados de executar de fato
essas tarefas, aplicando, de acordo
com seu tipo, as funções map ou
reduce definidas pelo usuário (típica
arquitetura master-slave).
44. MapReduce
Arquitetura
• A arquitetura compreende, ainda, um
sistema de arquivos distribuídos, onde
ficam armazenados os dados utilizados
como entrada para os Jobs. Para evitar
a transferência excessiva de dados, os
workers do MapReduce são também
nós do sistema de arquivos.
45. MapReduce
Tolerância a falhas
Worker
• Master detecta falhas através de pings
periódicos;
• Re-executa map tasks em progresso e
concluídas;
• Re-executa reduce tasks em progresso;
• Master re-executa tasks concluídas,
eventualmente completando a operação de
MapReduce.
46. MapReduce
Tolerância a falhas
Master
• Possui um único master, e sua falha é
improvável;
• Poderia ser tratada através de
checkpoints;
• A atual implementação da Google
aborta o MapReduce se o master
falhar.
49. Hadoop
Conceito
• Uma das implementações mais
conhecidas do MapReduce faz parte do
projeto Hadoop, mantido pela Apache
Software Foundation, e que tem como
finalidade desenvolver software livre
para computação distribuída, escalável
e confiável.
50. Hadoop
Conceito
• O Hadoop MapReduce é uma
implementação em Java do modelo de
framework criado pela Google, o qual
foi originalmente desenvolvido em C+
+.
• Muito parecido com a implementação
da Google, mas é flexível com relação
às máquinas em que roda.
54. Performance
Backup Tasks
• Problemas causados por stragglers
(máquinas cuja performance está
aquém dos demais nós).
• Tarefas executadas em stragglers
atrasam o processamento,
principalmente quando ocorre na fase
final de um job.
55. Performance
Backup Tasks
• São cópias de tasks em andamento no final
de sua execução de map/reduce.
• Quando qualquer uma das cópias termina
sua execução com sucesso, as demais são
encerradas.
• Reduz o tempo de execução em cerca de
40%.
56. Performance
Teste realizado em um cluster de 1800
máquinas, com processadores Intel Xeon
2GHz, 4GB de memória, dois discos IDE
160GB, e um link gigabit ethernet.
• Ordenação de 1 terabyte de dados
58. Performance
• Utilização de Backup Tasks reduz
significativamente o tempo de
execução.
• Sistema lida bem com falhas.
59. Conclusão
• Modelo fácil de usar, mesmo por
programadores sem experiência em
processamento distribuído;
• Permite o programador focar no problema,
e esquecer os "detalhes";
• Grande variedade de problemas podem ser
expressos em MapReduce;
• Simplificou computações em larga escala
do Google.
61. Referências Bibliográficas
1. MapReduce: Simplified Data Processing
on Large Clusters [Jeffrey Dean and
Sanjay Ghemawat].
2. Simulação e Estudo da Plataforma
Hadoop MapReduce em Ambientes
Heterogêneos [Wagner Kolberg].