MapReduce
      Diego Magalhães Cunha
   Jorge Luiz de Faria Fernandes
         Juliana Paula Félix
Roteiro
1 - Introdução
2 - Processamento Distribuído
     2.1 - Clusters
     2.2 - Balanceamento de Carga
3 - MapReduce
     3.1 - Modelo
     3.2 - Visão Geral - Google
     3.3 - Arquitetura
     3.4 - Tolerância a Falhas
4 - Hadoop
     4.1 - Conceito
     4.2 - Relação entre Google MapReduce e Hadoop MapReduce
5 - Performance
     5.1 Backup Tasks
     5.2 Exemplo
5 - Conclusão
6 - Referências Bibliográficas
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.
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.
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.
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.
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.
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.
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.
Processamento
  Distribuído
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.
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;
Processamento Distribuído
Processamento Distribuído
Processamento Distribuído
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.
Processamento Distribuído
Processamento Distribuído
MapReduce
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.
MapReduce

Modelo

•   Para tal, o modelo inspira-se nas
    primitivas Map e Reduce presentes em
    diversas linguagens funcionais, como
    Lisp e Haskell, por exemplo.
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.
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.
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.
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.
MapReduce
•   Pseudocódigo que conta a quantidade de ocorrências
    de cada palavra em um documento
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).
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.
MapReduce
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;
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.
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)>
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.
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);
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.
MapReduce

Visão Geral - Google

•   Usuários submetem jobs (conjunto de
    tarefas) para o master;
•   Master escalona tarefas para os
    workers.
MapReduce
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.
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).
MapReduce

Arquitetura
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;
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).
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.
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.
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.
MapReduce

Tolerância a falhas

•   Robusto: perdeu 1200 máquinas de um
    total de 1600, e a operação foi
    concluída com sucesso.
Hadoop
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.
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.
Hadoop
Hadoop

Relação entre Google MapReduce
e Hadoop MapReduce
Performance
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.
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%.
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
Performance
Performance


•   Utilização de Backup     Tasks reduz
    significativamente o      tempo   de
    execução.

•   Sistema lida bem com falhas.
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.
Referências
Bibliográficas
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].

MapReduce

  • 1.
    MapReduce Diego Magalhães Cunha Jorge Luiz de Faria Fernandes Juliana Paula Félix
  • 2.
    Roteiro 1 - Introdução 2- Processamento Distribuído 2.1 - Clusters 2.2 - Balanceamento de Carga 3 - MapReduce 3.1 - Modelo 3.2 - Visão Geral - Google 3.3 - Arquitetura 3.4 - Tolerância a Falhas 4 - Hadoop 4.1 - Conceito 4.2 - Relação entre Google MapReduce e Hadoop MapReduce 5 - Performance 5.1 Backup Tasks 5.2 Exemplo 5 - Conclusão 6 - Referências Bibliográficas
  • 3.
  • 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.
  • 11.
  • 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;
  • 14.
  • 15.
  • 16.
  • 17.
    Processamento Distribuído Balanceamento deCarga • 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.
  • 18.
  • 19.
  • 20.
  • 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.
  • 30.
  • 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.
  • 38.
  • 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).
  • 41.
  • 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.
  • 47.
    MapReduce Tolerância a falhas • Robusto: perdeu 1200 máquinas de um total de 1600, e a operação foi concluída com sucesso.
  • 48.
  • 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.
  • 51.
  • 52.
    Hadoop Relação entre GoogleMapReduce e Hadoop MapReduce
  • 53.
  • 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 emum 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
  • 57.
  • 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.
  • 60.
  • 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].