Você está na página 1de 53

A obra Processamento de Dados em Larga Escala na Computao Distribuda de Celso Luiz Agra de S Filho foi licenciada com uma

Licena Creative Commons - Atribuio - Uso No Comercial - Partilha nos Mesmos Termos 3.0 No Adaptada.

UNIVERSIDADE CATLICA DE PERNAMBUCO CENTRO DE CINCIAS E TECNOLOGIA TRABALHO DE CONCLUSO DE CURSO

PROCESSAMENTO DE DADOS EM LARGA ESCALA NA COMPUTAO DISTRIBUDA

por

CELSO LUIZ AGRA DE S FILHO

Recife, Junho de 2011

UNIVERSIDADE CATLICA DE PERNAMBUCO CENTRO DE CINCIAS E TECNOLOGIA CURSO DE CINCIA DA COMPUTAO TRABALHO DE CONCLUSO DE CURSO

Processamento de dados em larga escala na computao distribuda

por

Celso Luiz Agra de S Filho

Monografia apresentada ao curso de Cincia da computao da Universidade Catlica de Pernambuco, como parte dos requisitos

necessrios obteno do grau de Bacharel em Cincia da Computao.

ORIENTADOR: Silvio Soares Bandeira, Mestre

Recife, Junho de 2011

Celso Luiz Agra de S Filho, 2011

ii

"Sempre fao o que no consigo fazer para aprender o que no sei" Pablo Picasso

iii

Resumo da Monografia apresentada ao curso de Cincia da Computao da Universidade Catlica de Pernambuco.

PROCESSAMENTO DE DADOS EM LARGA ESCALA NA COMPUTAO DISTRIBUDA


Celso Luiz Agra de S Filho
Junho/2011

Orientador: Silvio Soares Bandeira, Mestre. rea de Concentrao: Computao Distribuda. Palavras-chave: MapReduce, GFS, Hadoop. Nmero de Pginas: 42.

Este documento visa apresentar solues para o problema do processamento de grandes conjuntos de dados, com nfase no paradigma MapReduce. Um Modelo abstrato de programao que auxilia na execuo de operaes em ambientes distribudos. Focando na alta capacidade de manipulao de informaes em larga escala, utilizando uma organizao definida por clusters. O uso desse paradigma est se popularizando de forma gradativa devido aos benefcios que ela traz, tanto no desenvolvimento de aplicaes quanto na performance das operaes nela contida. Agora, um sistema pode ser desenvolvido para que o programador no necessite ter conhecimento sobre ambientes distribudos. Sendo assim, a facilidade de criar aplicaes distribudas contribuiu para o sucesso desse modelo. Atualmente, aplicaes como o Google File system (GFS) e o Hadoop, ganharam bastante notoriedade pela sua eficincia e desempenho. Dessa forma, foram adotadas por grandes corporaes como a Google (precursor do MapReduce), Facebook, Twitter, entre outras. O principal interesse dessas empresas est na alta capacidade de alocao de dados e no seu processamento.

iv

Abstract of Dissertation presented to UNICAP.

LARGE DATA PROCESSING ON DISTRIBUTED COMPUTING


Celso Luiz Agra de S Filho
June/2011

Supervisor(s): Silvio Soares Bandeira, Master Area of Concentration: Distributed Computing. Keywords: MapReduce, GFS, Hadoop. Number of Pages: 42.

This document presents solutions to the problem of processing large data, with emphasis on MapReduce paradigm. An abstract programming model that helps in the implementation of methods on distributed environments. Focusing on high capacity for handling information with large scale, using an environment defined by clusters. This paradigm is becoming popular because it has many benefits, both in the development of applications and in performance. Now, a system can be implemented in a way that the developer does not need to have knowledge about the environment. Thus, the facility of creating distributed applications, contributed to the success of this model. Applications like the Google File System (GFS) and Hadoop, gained enough notoriety for its efficiency and performance. This model was adopted by large corporations like Google (forerunner of MapReduce), Facebook, Twitter, among others. The main interest of these companies is the high capacity of data allocation and processing.

LISTA DE ILUSTRAES
Figura 2.1: Organizao de uma arquitetura de sistema paralelo ............................................. 12 Figura 2.2: Modelo de sistema distribudo utilizando uma camada middleware ..................... 14 Figura 2.3: Exemplo de modelo de chamada RPC ................................................................... 15 Figura 2.4: Organizao do modelo NFS ................................................................................. 18 Figura 2.5: Modelo Cloud Computing...................................................................................... 19 Figura 3.1: Modelo trivial do processamento de dados em um cluster .................................... 23 Figura 3.2: Combinao das funes Map e Fold .................................................................... 28 Figura 3.3: Representao do modelo MapReduce .................................................................. 30 Figura 3.4: Diagrama de execuo do algoritmo de contagem de palavras ............................. 31 Figura 3.5: Modelo MapReduce com os Partitioners e os Combiners .................................... 35 Figura 3.6: Distribuio de um modelo MapReduce ................................................................ 36 Figura 4.1: Modelo do Google File System ............................................................................. 42 Figura 4.2: Utilizao do Hadoop em um cluster ..................................................................... 43 Figura 4.3: Arquitetura do modelo de arquivos do Hadoop (HDFS) ....................................... 45

vi

SUMRIO

1 2

INTRODUO .................................................................................................................. 7 TCNICAS DE PROCESSAMENTO DE DADOS ........................................................ 10 2.1 2.2 2.3 2.3.1 2.3.2 2.3.3 2.4 Dividir para Conquistar .......................................................................................... 10 Computao Paralela .............................................................................................. 12 Computao Distribuda ......................................................................................... 13 Comunicao ...................................................................................................... 14 Classificao dos Sistemas Distribudos ............................................................ 16 Sistema de Arquivos Distribudos DFS ........................................................... 16 Computao nas Nuvens ........................................................................................ 18

O MODELO DE PROGRAMAO MAPREDUCE ...................................................... 21 3.1 3.2 3.2.1 3.3 3.4 3.5 3.6 3.7 Motivao ............................................................................................................... 21 Paradigma da Programao Funcional ................................................................... 24 Funes generalizadoras: Mapeamento e Reduo ............................................ 25 Combinando Map e Fold ........................................................................................ 27 Mappers e Reducers ............................................................................................... 28 Word Count MapReduce ........................................................................................ 30 Execuo do Modelo em um Sistema Distribudo ................................................. 32 Consideraes Finais .............................................................................................. 37

ESTUDO DE CASO ......................................................................................................... 39 4.1 4.2 4.2.1 4.2.2 4.3 Google File System - GFS ..................................................................................... 39 Hadoop ................................................................................................................... 42 Hadoop Distributed File System ........................................................................ 44 Interface Hadoop ................................................................................................ 45 Aplicaes MapReduce em Sistemas Reais ........................................................... 46

CONCLUSO .................................................................................................................. 48

REFERNCIAS BIBLIOGRFICAS ..................................................................................... 50

1 INTRODUO
A era da informao, surgiu com o intuito de contribuir com a sociedade em sua busca por conhecimento. Essa necessidade s foi possvel ser suprida, devido a evoluo dos novos dispositivos eletrnicos, que puderam fornecer meios para amadurecer cada vez mais as idias de um determinado conjunto de pessoas. Nos dias atuais, torna-se inevitvel o surgimento gradativo de novos dados no universo da tecnologia da informao (TI). Segundo White (2009, p. 1): Ns vivemos na era dos dados. A partir dessa afirmao, notvel a preocupao do momento atual, pois necessrio armazenar um alto volume de informaes. Sendo assim, as mquinas precisam fornecer melhores condies para que esses dados possam ser manipulados de uma maneira simples e eficaz, aproveitando ao mximo toda a capacidade que um ambiente computacional pode oferecer. No mundo real, sistemas so utilizados diariamente por inmeros usurios, que lem e escrevem constantemente dados, gerando uma alta taxa de transferncia (throughput). Portanto, indispensvel o uso de mecanismos capazes de suportar diversas solicitaes, como no caso dos sistemas distribudos, que utilizam o conceito da redundncia de componentes, aumentando a escalabilidade, a segurana e outros benefcios que sero abordados posteriormente. Atualmente, esses modelos esto sendo adotados por grandes corporaes, como um meio para fornecer um melhor desempenho s suas aplicaes. Sistemas como o Facebook chegaram a armazenar 1 petabyte de informaes no ano de 2008, registrando cerca de10 bilhes de fotos em seus servidores (WHITE, 2009, p. 1). Outro exemplo encontra-se no site da Organizao Europia de Pesquisa Nuclear (CERN), onde afirmam que o acelerador de partculas LHC (Grande Colisor de Hdrons) poder produzir dados de at 15 petabytes ao ano1. De acordo com os exemplos citados, pode-se concluir a real necessidade do uso de sistemas robustos com um alto poder de armazenamento e de processamento dos dados nele contido. notvel que ao longo do tempo, os computadores evoluram seu poder de armazenamento de bytes para terabytes. Esse desenvolvimento trouxe grandes benefcios aos usurios, que puderam desfrutar de uma elevada quantidade de espao para armazenar seus dados. Contudo, o grande problema em questo no se baseia no tamanho das informaes armazenadas, e sim na quantidade de dados que podem ser processados pelo sistema. Tendo

http://public.web.cern.ch/public/en/LHC/Computing-en.html

ainda como exemplo a rede social Facebook, estima-se que milhes de usurios acessem diariamente o site, lendo e escrevendo inmeras informaes em fraes de segundo. Para esse problema, preciso utilizar modelos eficazes (abordados em sees posteriores), capazes de classificar os dados para que o sistema possa manipul-los de forma rpida e eficiente. A principal motivao pelo qual foi escolhido este tema a preocupao da era atual, relacionado ao crescimento desenfreado da quantidade de dados armazenados em todo o universo da TI. Mecanismos como a minerao de dados (Data Mining) esto sendo bastante utilizados atualmente, acumulando grandes quantidades de informaes. Muitas empresas utilizam tcnicas baseadas em logs de atividades, que especificam as diversas aes realizadas por um nico usurio. Segundo Lin (2010, p. 1), essa prtica pode trazer srias conseqncias quando utilizada de forma errada. Uma empresa pode adquirir tantas informaes em pouco tempo, que no conseguir process-las e nem organiz-las. Dessa forma, acabaro desprezando-as, perdendo oportunidades que poderiam auxiliar na evoluo do seu sistema. Portanto, torna-se necessrio que as mquinas possuam um hardware com alto poder de processamento, para realizar as inmeras atividades solicitadas pelo usurio. Gordon Moore foi um dos primeiros a expressar tal preocupao, em seu artigo Cramming more components onto integrated circuit2. Ele afirmou que desde a dcada de 50, a prtica de miniaturizar componentes eletrnicos, para incluir funcionalidades mais complexas em menos espao, vem sendo bastante difundida entre todos os pesquisadores da sua poca. Dessa forma, a cada 18 meses3 o nvel de transistores colocados em um circuito integrado iria dobrar, ou seja, o nvel complexidade aumentaria nos dispositivos. Esse documento ficou conhecido como a Lei de Moore4. Por muito tempo, essa teoria esteve certa. Sistemas necessitavam de supercomputadores com inmeros componentes que pudessem realizar uma vasta quantidade de clculos em pouco tempo, fornecendo uma estrutura para que o sistema pudesse operar com um melhor desempenho. Recentemente este paradigma foi quebrado devido ao avano dos componentes e a criao de ambientes paralelos e distribudos, que puderam fornecer um alto desempenho se comparado aos sistemas centralizados. Agora, uma aplicao poderia ser executada concorrentemente entre os diversos elementos de uma maquina, seja ela distribuda ou multiprocessada. As tcnicas de processamento de grandes quantidades de dados sero abordados no prximo capitulo (Seo 2), que devero apresentar conceitos e estratgias
2 3

Em portugus: Agrupando mais componentes em circuitos integrados. Moore atualizou essa estimativa para 2 anos. 4 ftp://download.intel.com/museum/Moores_Law/Articles-Press_Releases/Gordon_Moore_1965_Article.pdf

utilizados para auxiliar na manipulao desses dados. Desde a origem da tcnica de diviso e conquista at as aplicaes da computao nas nuvens. No capitulo posterior (Seo 3) dever abordar tcnicas do novo paradigma da computao distribuda, o MapReduce. Um sistema capaz de processar uma grande quantidade de dados em apenas poucos segundos, utilizando uma estrutura hierrquica e escalar, de fcil usabilidade. Aps a apresentao desse novo paradigma, sero abordados alguns estudos de caso (Seo 4), que obtiveram sucesso com a utilizao desse modelo, dando nfase as duas aplicaes mais populares que adotaram esse mecanismo, o Hadoop e o Google File System.

10

2 TCNICAS DE PROCESSAMENTO DE DADOS


A era da informao proporcionou grandes benefcios, fornecendo mquinas capazes de realizar com alta velocidade, milhares de clculos. Na medida em que evoluam, os dispositivos ficavam cada vez mais robustos, suportando cargas elevadas de informaes. A melhoria dos recursos de um componente, tal como a evoluo gradativa da capacidade de armazenamento e processamento de uma simples mquina, aumenta o nvel de complexidade dos dispositivos, como previsto por Moore, ou seja, um simples computador dever estar em constante evoluo para atender as necessidades de um sistema. As tcnicas de processamento de dados apresentadas nesta seo, visam proporcionar maneiras simples e eficientes de solucionar este problema. possvel criar um sistema robusto, que possa atender as demandas impostas pelos usurios. A primeira idia a se pensar como podemos implantar sistemas sem a necessidade de utilizar mquinas de grande porte, tais como um mainframe ou um supercomputador. Essa questo ser abordada durante toda a seo, apresentando solues quanto forma de processamento dessas informaes. Vale ressaltar que a grande dificuldade destacada por esse documento a necessidade de processar dados em larga escala e por isso necessria a utilizao de sistemas de alto desempenho. Uma maneira de melhorar a performance de uma aplicao a separao dos problemas em partes independentes. A diviso dessas atividades contribui com a resoluo das dificuldades impostas pelo sistema, auxiliando em questes como a execuo paralela dos processos e o controle do nvel de complexidade de uma aplicao. Nesta seo sero abordados mecanismos para a realizao do processamento de dados de forma rpida e eficiente. Utilizando tcnicas para a diviso de atividades, conceitos de paralelismo e mecanismos de distribuio de problemas entre os componentes envolvidos.

2.1 Dividir para Conquistar


As tcnicas de diviso e conquista foram utilizadas primeiramente por Karatsuba Anatolii5, que desenvolveu um algoritmo, apresentado em um documento intitulado The

http://www.mi.ras.ru/~karatsuba/index_e.html

11

complexity of Computations6, que visa solucionar problemas matemticos a partir da separao dos clculos, realizando atividades com um menor grau de dificuldade. A separao de problemas em partes menores foi utilizada em ambientes computacionais com o intuito de controlar a complexidade de um determinado algoritmo. possvel separar as aes em etapas, para que possam ser utilizadas em fins de legibilidade do cdigo, desempenho e modularidade do sistema. Um sistema modular composto por vrios procedimentos que visam alcanar um determinado objetivo. A principal vantagem de desse modelo simplista, a capacidade de reutilizar as atividades impostas dentro de um processo. A utilizao do conceito dividir para conquistar tambm pode ser aplicada para solucionar problemas do mundo real. Como no caso de um processo de desenvolvimento de software, que dever seguir uma sequncia de etapas at que o cdigo esteja condizente com as necessidades do cliente. Esses passos so executados de forma distinta a fim de estabelecer um controle sobre o fluxo de atividades para a implementao de uma nova aplicao. Outro exemplo pode ser visto em tticas militares, adotadas com o intuito de alcanar seus objetivos. Um exrcito poderia utilizar estratgias para separar seus inimigos e derrot-los com menor esforo. Assim como nos campos de batalha, a computao utiliza-se desta tcnica para resolver problemas de forma eficiente e eficaz. Na medida em que um problema dividido, sua complexidade torna-se controlvel, resultando em uma soluo clara e concisa da atividade. As tcnicas de diviso e conquista so comumente utilizadas em diversos algoritmos e mostraram-se a maneira mais eficiente de executar atividades que necessitem de uma vasta quantidade de execues de comandos. Em destaque pode-se verificar o uso desse mecanismo em algoritmos, como no caso do merge sort (CORMEN et al., 2002, p. 28), que visa ordenar os valores separando-os em pequenos vetores e combinando-os na medida em que so ordenados. O grande recurso por trs dos algoritmos que utilizam esse princpio a prtica da recursividade, garantindo que as funes possam realizar chamadas a si mesmo, caracterizando um processo repetitivo. A utilizao da tcnica de diviso e conquista no est restrito apenas a algoritmos, funes matemticas ou estratgias militares. A utilizao deste recurso tambm influenciou a criao de sistemas capazes de separar e executar tarefas, como os sistemas paralelos e distribudos.

http://www.ccas.ru/personal/karatsuba/divcen.pdf

12

2.2 Computao Paralela


A computao paralela surgiu com o intuito de atender necessidade de aumentar o desempenho dos sistemas. Atualmente a capacidade de um processador chegou ao seu limite (ao limite da tecnologia atual). A quantidade de componentes encontrados em um processador bastante alta, a nica maneira encontrada de melhorar o desempenho de uma maquina inserindo novos recursos, ou seja, um novo processador. A utilizao de mltiplos processadores em computadores pessoais est se tornando cada vez mais comum, devido necessidade de processar uma quantidade maior de dados. Sistemas esto executando tarefas cada vez mais complexas e necessitam de maior velocidade em suas atividades. Um computador com multiprocessadores pode executar tarefas de forma concorrente, onde cada processador poder executar uma atividade solicitada, contribuindo com o desempenho do sistema. A Figura 2.1 apresenta uma situao comum, onde um sistema opera com mais de um processador.

Figura 2.1: Organizao de uma arquitetura de sistema paralelo.

possvel notar que este tipo de arquitetura utiliza vrios processadores operando de forma concorrente e compartilhando os mesmos recursos, como no caso da memria principal. A vantagem da utilizao de um sistema fortemente acoplado (como tambm pode ser chamado), a garantia de um ambiente com maior desempenho. A quantidade de processadores est proporcionalmente ligada ao throughput. Outra vantagem da utilizao de sistemas paralelos est na segurana das operaes. No caso de uma falha em um dos processadores, os demais automaticamente continuaro em funcionamento. Dessa forma, o sistema continuar a execuo de suas atividades, porem com um menor poder de processamento. Um sistema fortemente acoplado pode ser classificado de acordo com a diviso de funes dentro de um ambiente. No caso dos sistemas de multiprocessamento paralelo

13

(SMP7), os processadores possuem um nico nvel em comum. Para os sistemas de multiprocessamento assimtrico (AMP8), os processadores so classificados de forma hierrquica, atravs do relacionamento mestre-escravo (SILBERSCHATZ et al. 2002, p. 8-9). Todo o ambiente controlado por um nico processador que envia solicitaes para os demais. As diferenas entre os modelos simtrico e assimtrico podem ser visualizadas, quando comparadas em questes de hardware e software.

2.3 Computao Distribuda


A computao distribuda consiste na utilizao de um conjunto de mquinas conectadas por uma rede de comunicao, atuando como um nico sistema. Esse conjunto de dispositivos, ao contrrio dos sistemas paralelos, possuem seus prprios recursos, como a memoria principal e o clock do processador. Sendo a comunicao estabelecida por uma rede atravs de protocolos especficos. Um sistema distribudo visa atender s caractersticas relevantes desse modelo, ou seja, precisa ser transparente, tolerante a falhas, escalar e ter um alto poder de processamento9. A principal motivao para a criao de uma aplicao distribuda a sua capacidade de fornecer a um grupo de usurios, os vrios recursos mantidos por ela, garantindo uma melhor disponibilidade e confiabilidade das informaes e dos servios contidos no sistema. Outra vantagem dos sistemas distribudos o baixo custo se comparado a um modelo que utiliza mquinas high-end10, como no caso de um supercomputador. possvel conectar um conjunto de maquinas de baixo custo (denominadas commodities), para que possam compor um sistema robusto e eficiente. Um modelo de sistema distribudo pode comparar-se a vrios cenrios, como por exemplo, um ambiente de construo civil. Cada funcionrio, assim como os computadores, desempenha um papel importante para a obra. Para o cliente, no importa a quantidade de trabalhadores ou quais ferramentas esto sendo utilizadas. O importante para este exemplo, que o objetivo seja alcanado, neste caso, a construo precisa ser concluda. Um sistema distribudo caracteriza-se principalmente por uma camada denominada middleware, que prov transparncia ao sistema. A utilizao dessa camada fornece a
7 8

Symmetric Multiprocessing Asymmetric Multiprocessing 9 No caso dos clusters, que sero explicados ainda nesta seo. 10 Os computadores high-end so caracterizados por serem produtos robustos e de alta capacidade.

14

capacidade de uma aplicao abstrair todas as informaes a respeito da estrutura de um ambiente distribudo para o usurio. Sendo assim, um conjunto heterogneo de mquinas, pode compor um nico sistema, independente das questes de localizao, de hardware ou de software. Como apresentado na Figura 2.2, a camada middleware est situada logicamente entre a camada do sistema operacional e da aplicao. possvel que diferentes programas possam estabelecer uma comunicao entre si, comutando diversas informaes atravs de protocolos de comunicao, garantindo que sistemas distintos possam realizar troca de dados.

Figura 2.2: Modelo de sistema distribudo utilizando uma camada middleware. Essa organizao garante a interoperabilidade do sistema.

2.3.1 Comunicao
Toda a estrutura de um sistema distribudo s garantida devido ao mecanismo de comunicao entre os processos. de extrema importncia que esse modelo utilize tcnicas para a comutao de informaes. Os principais modelos de comunicao destacam-se pela transmisso de mensagens de baixo nvel entre os diversos dispositivos. A utilizao da troca de dados em uma aplicao distribuda visa realizar chamadas como se estivessem executando um servio localmente. Assim como nos modelos centralizados, preciso garantir que vrios processos possam compartilhar informaes dentro do sistema. Porm a implementao desses servios em ambientes distribudos so bastante complexos, e necessitam da utilizao de protocolos de comunicao para que dispositivos de diferentes espcies possam comunicar-se.

15

O mecanismo mais comum, utilizado para a troca de informaes conhecido como chamada de procedimento remoto (RPC), que estabelece uma comunicao com o servidor de forma transparente, como se executasse uma chamada local. Primeiramente o cliente solicita uma funo atravs de um mecanismo denominado client stub. A solicitao empacotada (marshalling) e ento enviada ao servidor, podendo passar tambm parmetros dentro desse mtodo. Depois de capturar a mensagem, o computador que possui a implementao dessa chamada dever desempacot-la (unmarshalling) para poder process-la. A solicitao retornada ao cliente juntamente com os dados solicitados atravs do server stub . A chamada RPC ilustrada na Figura 2.3.

Figura 2.3: Exemplo de modelo de chamada RPC. Toda a requisio feia por uma biblioteca do ambiente de execuo RPC (RPC Runtime Library).

Outros mecanismos de comunicao remota tambm se destacam, como no caso dos sockets, que consistem em um mecanismo para estabelecer a troca de pacotes entre os sistemas, atravs da camada IP. Esse artificio definido como uma extremidade de um canal de comunicao (SILBERSCHATZ et al. 1999, p. 355), que utiliza um socket para cada processo, estabelecendo uma comunicao entre eles. A comutao de mensagens estabelecida utilizando uma arquitetura cliente-servidor, onde o servidor aguarda por uma solicitao do cliente em uma determinada porta. A mensagem transmitida composta por um endereo IP juntamente com a porta de acesso a um servio, podendo utilizar protocolos orientados a conexo (Ex.: TCP) ou sem conexo (Ex.: UDP) (SILBERSCHATZ et al. 1999, p. 356).

16

2.3.2 Classificao dos Sistemas Distribudos


Os sistemas distribudos podem ser classificados quanto sua organizao e a finalidade com que so utilizados. Na computao em cluster, um sistema composto por um conjunto de dispositivos idnticos (tanto pelo hardware quanto pelo software utilizado), visando o alto desempenho. Portanto, garantido tambm um baixo custo devido utilizao de mquinas commodities. A principal caracterstica desse modelo a sua homogeneidade entre os dispositivos. necessrio que os computadores possam se comunicar de forma rpida e eficiente, inclusive realizando transferncia de processos entre os diversos dispositivos. A disponibilidade uma das principais vantagens desse sistema, pelo fato de garantir a tolerncia a falhas. Caso uma mquina venha a falhar, o sistema continuar em execuo, sem que o usurio perceba a ocorrncia do problema. Porm se a falha ocorrer em determinadas regies, como no caso de uma falta de energia, ento o sistema poder no funcionar corretamente. No caso da computao em grade (grid), o ambiente baseado na disperso das funcionalidades de cada servidor. A principal caracterstica desse modelo a especializao funcional, proporcionando uma maior segurana aos servios. Este tipo de modelo pode ser estruturado para que vrios dispositivos atuem de forma conjunta, constituindo uma nica aplicao. Cada mquina ficar encarregada de fornecer um determinado servio. O principal objetivo para esse tipo de ambiente garantir a disponibilidade e confiabilidade dos servios. Mesmo que ocorra uma falha em determinadas regies, o sistema poder continuar em execuo.

2.3.3 Sistema de Arquivos Distribudos DFS


Um sistema de arquivos fornece uma estrutura que apresenta a possibilidade de armazenar dados, disponibilizando servios para nomeao, alterao e compartilhamento de dados, garantindo uma estrutura que determina a autenticidade de um arquivo, como no caso de um identificador, visando tambm a segurana quanto ao acesso desses dados. Assim como em um ambiente distribudo, um DFS deve garantir que as particularidades dessas aplicaes sejam atendidas, como no caso da transparncia, da escalabilidade, da segurana, da tolerncia a falhas e da heterogeneidade. Um sistema de arquivos distribudos

17

deve garantir que vrias maquinas estejam conectadas comutando informaes atravs de protocolos. Alguns mecanismos so utilizados para melhorar o desempenho deste tipo de sistema, como no caso da replicao. Alm de garantir a segurana, a tcnica de replicar dados pelo sistema, garante uma maior disponibilidade, realizando tambm o balanceamento de carga entre os dispositivos. Outra maneira para auxiliar na performance do sistema o uso do esquema de caching. As informaes so armazenadas em cache, para que quando solicitadas, o cliente possa recuper-la rapidamente. Vale ressaltar que em um DFS necessrio que as informaes estejam consistentes, para isso realizado verificaes sempre que houver alguma atualizao nos arquivos. Existem vrios sistemas DFS. Um dos mais conhecidos denominado o Network File System (NFS), que tem como finalidade fornecer acesso, armazenamento e compartilhamento de arquivos remotos, atravs de uma Local Area Network (LAN) ou Wide Area Network (WAN). Trata-se de um sistema que utiliza uma arquitetura cliente-servidor, onde diversas de maquinas esto conectadas por uma rede, permitindo realizar operaes especificas do sistema de arquivos comum. A comunicao do NFS ocorre a partir de um conjunto de RPCs que fornece diversos servios, como a consulta, a leitura e a escrita de informaes, alm de manipular links e diretrios controlando o acesso aos dados. A arquitetura do NFS possui trs camadas como ilustrada na Figura 2.4: a primeira camada representa a interface do sistema de arquivos, que dever realizar operaes comuns, tais como, open, close, read e write. A segunda camada conhecida como Virtual File System (VFS), que realiza funes importantes ao sistema. Sendo assim, esta camada ir realizar operaes especificas para a manipulao de dados de forma clara e concisa, sempre fornecendo transparncia a este modelo. A terceira camada representa o sistema de arquivos local, que realiza a manipulao dos arquivos locais. Alm do NFS, existem outros tipos de DFS, como no caso do Andrew File System11 (AFS), desenvolvido pela Universidade de Carnegie Mellon12 (CMU), e mais tarde comercializado pela Transarc em 1989. Assim como todo sistema de arquivos distribudos, ele proporciona vrios benefcios provenientes da computao distribuda. O AFS fornece servios de caching, escalabilidade, controle de acesso e simplificao na administrao dos arquivos.

11 12

http://www.cmu.edu/corporate/news/2007/features/andrew/what_is_andrew.shtml http://www.cmu.edu

18

Figura 2.4: Organizao do modelo NFS. As solicitaes so feitas atravs da camada de interface de chamada ao sistema, que dever chamar o VFS. Este por sua vez dever solicitar a operao ao sistema de arquivos, podendo ser realizada localmente ou remotamente.

2.4 Computao nas Nuvens


A computao nas nuvens (Cloud Computing) consiste na disponibilizao de servios dentro do universo da Internet. Neste caso, todo e qualquer sistema pode ser abstrado como parte integrante de uma nuvem. Esse tipo de modelo produto da evoluo dos sistemas, que puderam adquirir uma alta capacidade em seu poder de processamento, melhorando o desempenho de suas atividades e a sua alta escalabilidade. A implantao de ambientes distribudos trouxe uma maior disponibilidade aos servios inclusos nessa nuvem. Agora, uma aplicao poderia ser solicitada por milhes de pessoas, acessando vrios sistemas que se comunicam e trocam informaes. Uma nuvem pode ser classificada de trs maneiras distintas: a primeira classificada como nuvem pblica (Public Cloud), que visa atender as solicitaes pblicas e gratuitas dos clientes. A segunda pode ser classificada como privada (Private Cloud), devido ao fato de utilizar uma infraestrutura para fornecer servios pagos ou de uso interno de uma corporao. A juno dessas duas nuvens conhecida como hbrida (Hybrid Cloud), que utiliza caractersticas das nuvens privadas e publicas. O termo nuvem proveniente da expresso metafrica utilizada para caracterizar o modelo da web (VELTE, A.;VELTE, T.;ELSENPETER, 2010, p. 3), onde todos os

19

dispositivos encontram-se interligados por uma rede de comunicao. A computao funciona de forma semelhante Internet, todos os dispositivos esto interligados por uma nuvem, compartilhando informaes entre diversos sistemas de diferentes gneros. A Figura 2.5 ilustra o modelo Cloud Computing, onde vrios elementos esto conectados por uma nuvem. Cada componente deste ambiente caracterizado por uma funcionalidade, como os clientes e os sistemas (ou aplicaes).

Figura 2.5: Modelo Cloud Computing. Cada cliente pode realizar requisies de servios de diversos sistemas atravs da internet. Todos conectados a uma nica nvem.

Um cliente consiste em um dispositivo de qualquer natureza (Ex.: um smartphone, um notebook ou um tablet) conectado a uma rede, que realizar solicitaes aos sistemas. Este por sua vez, desempenha o papel de disponibilizar servios para a manipulao, compartilhamento e armazenamento de dados. Grandes corporaes adotaram este modelo para fornecer variados servios. Algumas aplicaes adotaram o sistema conhecido como pague o que consumir (pay-as-you-go), onde um cliente poder usufruir de uma aplicao de uso privado. Essa viso semelhante a qualquer servio do mundo real, onde uma pessoa paga somente quilo que foi utilizado, como o servio de energia eltrica. A nuvem pode fornecer diversos tipos de servios, que pode ser classificados por trs categorias (ANTONOPOULOS, 2010, p. 4-5; VELTE, 2010, p. 11-16): Infra-estrutura como um servio (IaaS13): Fornece um ambiente para que o usurio possa desfrutar de uma estrutura fornecida na web, como
13

Infrastructure as a service.

20

armazenamento ou at mesmo como um sistema operacional, atravs da virtualizao. Um cliente pode alugar uma determinada estrutura, escolhendo a capacidade do seu hardware, como memria principal, espao de

armazenamento e at a capacidade do processador. Plataforma como um servio (PaaS14): Oferece um ambiente capaz de auxiliar no desenvolvimento de uma aplicao, sem a utilizao de um programa especifico. Atualmente diversos sistemas fornecem sua prpria API15 para que o usurio possa criar aplicaes e disponibiliz-las na web. Software como um servio (SaaS16): Um programa pode ser utilizado como um servio disponibilizado na nuvem, onde o cliente poder desfrutar da aplicao apenas utilizando o navegador. O exemplo mais comum desse modelo so os editores de texto, que se popularizou rapidamente pela sua facilidade de fornecer um servio onde vrios usurios podem acessar e alterar a mesma informao de forma consistente.

A principal caracterstica desses servios a facilidade do uso dessas aplicaes apenas utilizando o navegador como programa local. Todo o sistema est dentro de uma nuvem, podendo ser acessada em qualquer local. Essa facilidade permitiu a popularizao desses sistemas, onde o cliente no se preocupa com questes de acessibilidade ou segurana. Toda sua informao est armazenada na web. O uso da computao nas nuvens est se tornando cada vez mais popular entre os diversos usurios. Este tipo de aplicao fornece servios que utilizam um alto poder de resposta apenas utilizando um simples navegador. A tendncia para esse modelo, que cada vez mais as aplicaes estaro sendo includas nessa nuvem, que dar espao a aplicaes mais robustas e complexas, como no caso de um sistema operacional.

14 15

Plataform as a service. Application Programming Interface. 16 Software as a service.

21

3 O MODELO DE PROGRAMAO MAPREDUCE


Desde o inicio da era da informao, a busca por maior quantidade de armazenamento era imprescindvel. H quem diga que na dcada de 80, 640KB eram necessrios para guardar todas suas informaes17. Atualmente j estamos falando de muitos gigabytes para armazenar informaes de um nico usurio. Sendo assim necessrio utilizar meios capazes de processar uma grande quantidade de dados. Qualquer aplicao pode armazenar inmeras informaes dos seus usurios ou diversos arquivos do sistema. Para aumentar a escalabilidade e o seu poder de processamento, necessrio criar uma estrutura capaz de agrupar diversos dispositivos, podendo ser um conjunto de processadores para sistemas fortemente acoplados ou um conjunto de dispositivos no caso dos sistemas fracamente acoplados. O uso de ambientes distribudos est se tornando essencial para atender s necessidades dos usurios. Uma simples aplicao de grande porte necessita de centenas ou at milhares de servidores para suportar todas as solicitaes dos clientes. A criao de sistemas dessa natureza algo bastante complexo, pois extremamente importante atender a todos os requisitos necessrios de um ambiente distribudo, tal como a transparncia, a segurana, a escalabilidade e a concorrncia de componentes. Porm o desenvolvimento dessas aplicaes bastante complexo, pois demanda um alto conhecimento do funcionamento desses ambientes. nessa viso que iremos abordar novas tcnicas, dando nfase ao MapReduce. Um modelo que est se tornando popular entre as grandes corporaes, utilizando estratgias de desenvolvimento de aplicaes fornecendo uma estrutura capaz de manipular, gerenciar e processar dados em sistemas distribudos.

3.1 Motivao
Quando um programa desenvolvido em um ambiente distribudo ou multiprocessado, o programador precisa estar ciente de toda estrutura do sistema, especificando as referncias de cada dispositivo, para que possa estabelecer uma comunicao e sincronizao entre os
17

Palavras proferidas por Bill Gates em um discurso sobre softwares e a indstria da computao, onde ele afirma que o aumento da memoria de 64Kb para 640 Kb seria um grande salto, porm disse sentir-se arrependido pois em pouco tempo, usurios reclamavam da quantidade mnima de espao encontrada no sistema. Disponivel em <http://www.csclub.uwaterloo.ca/media/1989 Bill Gates Talk on Microsoft.html>.

22

processos. A tarefa do desenvolvedor de criar um sistema transparente bastante complexa, para isso so utilizadas tcnicas para esconder toda a estrutura dessas aplicaes, tal como o OpenMP (Open Multi-Processing) e o MPI (Message Passing Interface), que so utilizados com a finalidade de auxiliar o programador a fornecer transparncia a uma aplicao, seja ela paralela ou distribuda. A OpenMP uma interface para a programao de aplicativos (API) que utiliza a linguagem C/C++, cuja finalidade fornecer uma estrutura para auxiliar no desenvolvimento de aplicaes escalveis em sistemas paralelos. Agindo como se o programador utilizasse o mesmo mecanismo da memria compartilhada. No caso da MPI, trata-se de uma biblioteca de especificao de interface para a transmisso de mensagens em um ambiente paralelo. Os dados so transferidos a partir de um endereamento entre processos. Todos esses mecanismos tentam auxiliar o programador a desenvolver sistemas sem a preocupao de estabelecer comunicao e sincronizao entre os processos de cada dispositivo. Assim como a OpenMP e a MPI, o MapReduce um modelo de programao que auxilia o desenvolvedor a implementar sistemas com transparncia. Trata-se de uma camada entre a aplicao e o ambiente, capaz de abstrair ao desenvolvedor, a preocupao que o mesmo necessita ter ao trabalhar em um ambiente distribudo. Sua implementao utiliza o conceito de cluster de computadores, fornecendo um sistema escalar e com alto poder de processamento. Com este modelo possvel processar uma grande quantidade de dados em vrios computadores. Todo o tratamento deve ser realizado pelo MapReduce, que ir manipular e gerenciar os dados em um conjunto de dispositivos. Sua principal caracterstica a capacidade de separar os dados e distribu-los junto ao cdigo que dever ser executado entre os diversos ns do sistema. Esse modelo possui razes na programao funcional, utilizando o conceito de mapear e reduzir, caracterstica comum do paradigma funcional. Este modelo foi desenvolvido por dois funcionrios da Google, Jeffrey Dean e Sanjay Ghemawat, que o apresentaram na conferncia OSDI04 (The Operating System Design and Implementation Conference 2004). A principal preocupao de Dean e Ghemawat era encontrar uma possvel maneira de paralelizar o processamento, distribuir os dados, manipular falhas e gerenciar o balanceamento de cargas no sistema. Neste documento, foi apresentado um sistema capaz de solucionar esses problemas relacionados ao processamento distribudo, operando em grandes clusters. Esse modelo foi denominado MapReduce, proveniente da juno do nome de duas funes, mapear (map) e reduzir (reduce). Inicialmente, o sistema foi desenvolvido utilizando a linguagem de

23

programao LISP (List Processing), devido a sua caracterstica de adotar o paradigma funcional. O modelo MapReduce, utiliza uma sequncia de passos, como ilustrado na Figura 3.1. Dado um conjunto de dados, possvel separ-los em pequenas partes e distribu-las entre os diversos ns de um cluster, que dever ser especificado pelo programador. Essas distribuies so transferidas e organizadas em pares definidos por uma chave e um valor. Cada par dever ser direcionado a um determinado n. No exemplo da Figura 3.1, so transferidos documentos entre as diversas mquinas do sistema. Os dados distribudos entre as mquinas so definidos por uma chave (c1) representada pelo identificador do documento e por um valor (v1). No caso da Figura 3.1, a chave especificada pelo nome do arquivo enquanto o valor determinado pelo seu contedo. O documento processado pelas mquinas que possuem a funo map e encaminhado atravs de um par de chave-valor (c2, v2) para outro dispositivo, encarregado de processar a funo reduce, cuja finalidade combinar os valores recebidos. A sada (gerada pelo node 05) definida por um par de chave-valor, especificado por um identificador e o resultado da combinao da sada de cada n que executou a funo map.

Figura 3.1: Modelo trivial do processamento de dados em um cluster. Os documentos so separados e distribudos entre os diversos ns, que processam essas informaes e enviam a um outro n que dever executar a funo de combinao e retornar uma sada.

O exemplo apresentado nesta seo, demonstra um modelo trivial sobre a definio do MapReduce. Ao longo deste capitulo, sero apresentados novos conceitos com o intuito de amadurecer esse sistema, apresentando uma melhor definio do seu funcionamento, mostrando cada etapa desse processo, desde a separao dos dados at a combinao dos

24

resultados. A prxima abordagem trata-se do levantamento do conceito de programao funcional, dando nfase s duas funes principais que resultaram no modelo abordado neste documento: map e fold (neste contexto, agrupar).

3.2 Paradigma da Programao Funcional


A programao funcional originou-se antes mesmo do incio da era da informtica, sendo criada sobre forte influncia do clculo lambda (clculo-). Sua principal caracterstica o uso de funes de ordem superior18 (THOMPSON, 1999, p. 155-156), utilizado para definir notaes lgicas de funes matemticas. O clculo- foi criado em 1930 por Alonzo Church e Stephen C. Kleene (PETRICEK;SKEET, 2009, p. 21), com o intuito de determinar funes matemticas atravs de uma notao. Eles desenvolveram uma soluo para reduzir expressivamente clculos abordando uma maneira sistemtica para expressar frmulas matemticas, auxiliando seus estudos com o fundamento da matemtica. As linguagens de programao funcional utilizam artifcios influenciados pelo clculo- para oferecer uma linguagem elegante e sucinta capaz de organizar algoritmos de forma legvel. Com o avano da tecnologia, a programao funcional perdeu espao entre os programadores atuais, porm, esta viso vem se invertendo ao longo do tempo. Linguagens funcionais mostraram-se bastante eficientes para o processamento de grandes conjuntos de dados, melhorando drasticamente o desempenho de sistemas. Uma das principais caractersticas das linguagens funcionais so as funes de alta ordem, que podem ser transmitidas via argumentos para outras funes, resultando em um alto nvel de abstrao. Esse mecanismo torna o cdigo mais elegante e legvel. Outra tcnica bastante utilizada em linguagens funcionais denominada Currying, cuja finalidade receber mltiplos parmetros em uma nica funo (THOMPSON, 1999, p. 185). A utilizao dessa tcnica, combinada ao uso de funes de alta ordem, trouxe uma maior flexibilidade s aplicaes, que puderam aumentar seu desempenho e alcanar um nvel de escalabilidade maior. A programao funcional mostrou-se mais eficiente quando utilizada em sistemas paralelos, pois ela possui uma caracterstica bastante importante na maioria das estruturas, a imutabilidade. Os programas podem ser executados em paralelo sem a preocupao de ocorrer
18

O termo ordem superior designado para informar o uso de passagem de funes como argumento de outra funo, ou seja, pode-se passar como valor de uma funo, outra funo.

25

problemas, como no caso das condies de corrida e a criao de sees crticas (PETRICEK;SKEET, 2009, p. 6). O conceito de imutabilidade dos valores, trouxe grandes benefcios ao desenvolvimento do modelo MapReduce, pois possvel executar funes idnticas em grandes clusters de mquinas sem a preocupao do compartilhamento de informaes entre os processos. A primeira linguagem que se popularizou entre os cientistas, matemticos e desenvolvedores, foi a LISP, criada por John McCarthy em 1958, uma linguagem flexvel e baseada no clculo- (PETRICEK;SKEET, 2009, p. 21). O uso dessa linguagem trouxe grandes benefcios computao atual. A partir dela surgiram grandes idias tais como estruturas de dados e a coleta de lixo (Carbage Collection). Outras linguagens funcionais tambm contriburam para a evoluo da computao como as linguagens ML, Haskell, F# e a OCaml.

3.2.1 Funes generalizadoras: Mapeamento e Reduo


O uso de funes generalizadoras (THOMPSON, 1999, p. 152; DE S, 2006, p. 146) na programao funcional, desempenhou um papel importante na legibilidade e desempenho dos algoritmos que utilizam esse paradigma. Esse tipo de caracterstica um padro utilizado para auxiliar o caso da reusabilidade de cdigo, onde o desenvolvedor pode implementar sistemas utilizando tcnicas de funes de alta ordem. Devido a essa particularidade, possvel que linguagens de programao funcional possam generalizar funes em qualquer situao. A principal utilizao das funes generalizadoras a manipulao de estruturas de dados, onde possvel desenvolver funes que definam resultados sobre essas estruturas, gerando novos valores a partir dos dados recebidos. As funes mais populares utilizadas em algoritmos da linguagem funcional so conhecidas como map e fold. Essas permitem que os dados possam ser manipulados, gerando uma nova informao sem alterar os dados de entrada. A funo de mapeamento consiste em modificar os valores de uma lista, onde cada componente dever ser modificado, resultando em uma nova lista com novos componentes. Por conveno, o cdigo de uma funo de mapeamento ser apresentado utilizando a notao da linguagem Haskell (DE S; DA SILVA, 2006, p. 147-148):

26
#1 #2 #3 #4 #5 #6 #7 maiusc :: String -> String maiusc :: [] -> [] maiusc :: (a:b) toUpper a: maiusc b ret_maiusc :: [String] -> [String] ret_maiusc :: [] -> [] ret_maiusc :: (a:b) maiusc a: ret_maiusc b

A funo map definida como um mtodo que recebe e retorna uma lista de strings (linha 1). Caso receba alguma lista vazia, ento o resultado tambm dever retornar uma lista vazia. A notao a:b afirma que ser realizada a funo maiusc para o primeiro elemento da lista e novamente os demais elementos restantes, sero enviados como parmetros para a funo ret_maiusc. Na funo maiusc, so verificadas todas as letras pertencentes cadeia de caracteres, e ento executada a funo toUpper. A chamada a funo realizada atravs de um console (MEIRA, 1988, p. 9), representado por uma seta (->), que recebe uma lista strings para executar o procedimento maiusc:
-> ret_maiusc [Celso, Haskell, Mapeamento]

Pode-se verificar resultado da funo, atravs da sada do nosso console fictcio:


-> maiusc [CELSO, HASKELL, MAPEAMENTO]

A funo de agrupamento incide em combinar os valores de uma determinada lista. O cdigo da funo de agregao apresentado utilizando a notao da linguagem Haskell (DE S; DA SILVA. 2006. p. 149):
#1 #2 #3 concat :: [String] -> String concat :: [] -> [] concat :: (a:b) a ++ (concat b)

A entrada da funo fold, consiste em uma lista de strings que dever ser concatenada e retornada como uma nica string. Cada valor da lista dever ser concatenado atravs da notao ++. A funo de agrupamento executada pela seguinte chamada:
-> concat [exemplo , de funo , fold.]

27

O resultado gerado pela funo fold apresentado da seguinte forma:


-> exemplo de funo fold.

A utilizao do conceito de funes generalizadoras, como no caso das funes de mapeamento e agrupamento, influenciou bastante no desenvolvimento do MapReduce. Tratase de simples processos que do suporte ao paralelismo e escalabilidade devido s particularidades adotadas pelo paradigma funcional. A utilizao dos mtodos map e fold atuando em conjunto em diversos sistemas, geram grandes benefcios para a organizao desse modelo auxiliando no processamento de dados, sem a preocupao da concorrncia de informaes.

3.3 Combinando Map e Fold


Uma das tcnicas aplicadas no MapReduce bastante teis para a estruturao do modelo a combinao das funes generalizadoras, ilustrada na Figura 3.2. Dado um conjunto de informaes (representado por uma circunferncia) possvel separ-las em vrias partes e process-las em paralelo, a partir de uma funo de mapeamento (definida pela letra m). O resultado de cada map (representado por um tringulo) servir de entrada para cada elemento fold (definida pela letra f), que tambm receber como parmetro o resultado da funo de combinao anterior (representado pelo quadrado). No caso da primeira execuo fold, os valores iniciais (representado pelo primeiro quadrado, da esquerda para a direita) devero ser um conjunto de dados vazio, por questes bvias. As utilizaes das funes de alta ordem podem ser verificadas da seguinte forma: Suponha que em nosso problema exista uma lista de valores. A funo map captura um nico valor dessa lista e utiliza-o como argumento para o resultado da funo, que retornado como um valor arbitrrio (apenas um valor intermedirio). A sada da funo definida de acordo com as regras especificadas pelo programador que desenvolveu o algoritmo. A funo fold utiliza os valores intermedirios, retornados pelo map e utiliza-os como argumento para a sua funo. Vale ressaltar que a funo de agrupamento utiliza dois argumentos, um valor inicial e o valor intermedirio. O resultado desta funo retorna tambm um valor intermedirio, que servir de argumento para a prxima etapa.

28

Figura 3.2: Combinao das funes map (representada pela funo m) e fold (representada pela funo f).

notvel que este tipo de implementao possua total influncia do conceito dividir para conquistar. Na funo map cada valor de uma determinada lista separado de forma independente, para que possa ser executado em paralelo. Caso nosso exemplo utilize um cluster, as tarefas podem ser divididas e distribudas entre cada um dos ns do sistema. No caso da funo fold existe uma restrio quanto dependncia das atividades. Para ele necessrio obter a sada de outra funo. Porm, essa dependncia no to critica como se espera, na medida em que os elementos da lista so separados, a funo de agrupamento tambm executada em paralelo. A combinao das funes generalizadoras, definem de forma superficial o conceito do MapReduce. Dado um cluster, um conjunto de mquinas dever realizar a tarefa map, enquanto os demais executam a tarefa reduce, que so similares funo mapeamento e agrupamento da programao funcional. O framework utiliza a execuo dessas atividades forma paralela, garantindo o desempenho do sistema.

3.4 Mappers e Reducers


At o momento foram apresentados somente conceitos do MapReduce. Esta seo define a estruturao deste modelo, onde cada mquina que compe este sistema realiza uma atividade especfica.

29

Como j visto no capitulo anterior, um cluster utiliza um conjunto de mquinas para processar o sistema de forma transparente. O modelo MapReduce tambm utiliza este conceito de transparncia. Cada dispositivo responsvel por uma atividade dentro do sistema. No caso dos dispositivos responsveis pela funo map, estes so denominados mappers enquanto os que executam a funo reduce so conhecidos como reducers (LIN, 2010, p. 22). Para os respectivos agentes, as assinaturas de cada funo so especificadas com as seguintes assinaturas (DEAN; GHEMAWAT, 2004, p 2):
map: (c1, v1) -> (c2, v2) reduce: (c2, list(v2)) -> (c3, v3)

Por conveno uma lista de valores ser representada pelo uso da marcao list (...), que dever conter como argumento da funo o tipo dos valores. A sada da funo ser especificada pela seta (->), onde as informaes anteriores a ela informam os argumentos de entrada da funo, enquanto os dados aps a seta especificam o resultado gerado pela mesma. Para executar um mapper, necessrio utilizar dois argumentos, uma chave (especificada pelo componente c1) e o seu respectivo valor (v1). O resultado dessa funo gerado como um dado intermedirio, com uma chave e um valor (c2, v2). Esse tipo de resultado conhecido como par de chave-valor, que sempre apresentado como uma indexao, ou seja, para cada valor, existe uma determinada chave. Os dados utilizados durante a funo map so especificados pelo programador, que podem ser representados por qualquer tipo, tais como variveis de inteiros, pontos flutuantes e strings, ou at mesmo estruturas complexas como listas e arrays. Outras estruturas tambm podem ser utilizadas dentro do modelo MapReduce, como no caso das pginas web e dos grafos. Exemplos da utilizao dessas estruturas podem ser encontradas em Lin (2010, p. 96 - 102), nos algoritmos de pagerank e Dijkstra. O MapReduce, utiliza uma camada implcita entre as fases map e reduce para ordenar e agrupar os valores que possuem a mesma chave em comum, dessa forma, um conjunto de valores agrupado para uma nica chave. Os reducers recebem como argumentos, a sada dos mappers, para cada chave intermediaria (c2) existe um conjunto de valores intermedirios (list (v2)), ou seja, uma lista de valores relacionada a uma chave, que ser designada a um reducer. A sada gerada deste, resulta em um novo par de chave-valor (c3, v3), cada resultado armazenado no sistema de arquivos distribudos. Caso exista uma quantidade R de reducers, um conjunto de R arquivos dever ser cadastrado. As sadas geradas pelos agentes que

30

utilizam a funo reduce, nem sempre so transformadas em um nico arquivo. Porm, nada impede que eles sejam processados novamente por outra tarefa MapReduce, neste caso, um outro reducer poderia se encarregar de unir as R sadas. A Figura 3.3 ilustra toda a organizao dos mappers e reducers.

Figura 3.3: Representao do modelo MapReduce. A camada Shuffle and Sort indica que os pares de chave-valor sero agrupados de acordo com as chaves em comum, estes serviro de entrada para os Reducers, que dever gerar uma nova chave com um novo valor de acordo com a funo especificada pelo programador. (LIN; DYER, 2010, p. 23).

3.5 Word Count MapReduce


Nesta seo ser abordada a execuo de um modelo MapReduce utilizando um algoritmo de contagem de palavras, que dever retornar a quantidade de palavras existente em um conjunto de textos. Para os mappers, as entradas so especificadas por um par de chavevalor, onde a chave definida pelo documento e o valor pelo contedo do documento. Os reducers possuem a capacidade de agrupar cada incidncia de palavra de acordo com uma chave como demonstrado pelo algoritmo:
#1 #2 #3 #4 map (String chave, String valor) { foreach L in valor; gerarPalavraIntermediaria (L, 1) }

31

#5 #6 #7 #8 #9 #10

reduce (String chave, List valor) { int resultado = 0; foreach v in valor; resultado += (int) v; emitirResultado( (String) resultado); }

A funo gerarPalavraIntermediaria utilizada para gerar um novo par de chavevalor. Neste caso, para cada palavra, a funo map dever gerar o valor 1 (um), simbolizando que foi encontrada uma palavra. possvel que este tipo de processamento possa ser realizado em paralelo. Dado um cluster de mquinas, possvel que cada documento possa ser separado em vrias partes, que sero enviadas para os mappers, que devero emitir um novo par de chave-valor. Para os reducers, a nica tarefa a ser realizada a combinao de todos os resultados gerados pela funo de mapeamento. Neste caso, os resultados so armazenados de uma maneira que essa informao seja compartilhada entre todos os dispositivos pertencentes ao sistema, como no caso de um arquivo alocado em um ambiente distribudo. O resultado final apresentado pela funo emitirResultado que retorna o valor de toda a combinao feita pelo reducer. A Figura 3.4 ilustra todo o processo do exemplo citado.

Figura 3.4: Diagrama de execuo do algoritmo de contagem de palavras.

No exemplo da Figura 3.4, o fluxo de execuo do modelo MapReduce definido por etapas. Na separao dos dados, a entrada dividida em partes, de acordo com as especificaes impostas pelo programador. Para o exemplo citado, as informaes foram separadas de acordo com a quebra de linha. Sendo assim, cada n mapper dever executar uma pequena parte do arquivo. Cada instncia da funo map dever emitir um par de chavevalor, onde a chave ser especificada pela palavra e o valor pela quantidade que ela aparece

32

no texto (neste caso um nica vez). A etapa de ordenao19 definida a partir da semelhana entre as chaves, ou seja, cada instncia dever armazenar um conjunto de pares que possuam a mesma chave em comum. Por fim, cada par ser combinado dentro dos reducers, que devero retornar a quantidade de palavras contidas no texto. Neste exemplo, o resultado final foi combinado em uma nica sada, porm, nada impede que esta funo resulte em um conjunto de R sadas definidas pelos R reducers. O exemplo da contagem de palavras pode resolver um problema conforme a seguinte situao. Suponha que em um ambiente distribudo existem 10 bilhes de documentos, e cada um desses possui cerca de 50 KB. Para esse exemplo, um sistema precisa processar aproximadamente 500 terabytes de informao. Com uma quantidade elevada de dados, um dispositivo poderia demorar horas processando uma quantidade imensa de informaes, sobrecarregando o sistema e reduzindo o poder de resposta da aplicao, algo totalmente relevante para atender s necessidades dos usurios. Utilizando o modelo de programao paralela, o sistema seria capaz de executar o mesmo clculo para cada pgina da web de forma rpida e eficiente, utilizando conceitos complexos de bloqueios de seo crtica entre outros artifcios. Ainda assim, o sistema estaria sobrecarregado para executar uma quantidade significativa de processos. Devido a utilizao dos conceitos da programao funcional, o MapReduce no necessita fazer o uso de artifcios tais como bloqueios, nem garantir algum controle de concorrncia para executar o processamento em paralelo, resultando em cdigos mais limpos e de fcil legibilidade processando dados com maior velocidade.

3.6 Execuo do modelo em um Sistema Distribudo


Em um sistema distribudo, diversas mquinas executam vrias tarefas

simultaneamente. Utilizando a tcnica MapReduce, o sistema adquire uma capacidade de melhor escolha para a execuo dos seus processos. A arquitetura desse modelo est baseada na diviso hierrquica dentro de um cluster de computadores, que adotam um modelo de diviso de atividades onde uma mquina dever enviar solicitaes para a execuo de processos enquanto as demais executam essas requisies.

19

Esta funo ser explicada posteriormente quando for apresentado o conceito de partitioners e combiners.

33

As mquinas conhecidas como masters possuem a capacidade de separar e direcionar os processos dentro de um sistema, garantindo que uma solicitao seja direcionada a uma mquina arbitrria, denominada worker. Neste tipo de sistema, a diviso hierrquica das funes garantida atravs de uma organizao, onde ao menos uma mquina master gerencia um grupo de workers, podendo esses serem mappers ou reducers, conforme a funo obtida a partir de uma solicitao do master. A execuo de um programa MapReduce baseia-se em separar os dados em pequenas partes para que possa ser executado por vrios ns de um cluster. Porm, em alguns casos estas divises extrapolam a quantidade de ns existentes no sistema. Para evitar uma sobrecarga dessas atividades, alguns programas utilizam tcnicas de escalonamento para que os dados possam ser processados de forma eficiente. Uma fila de atividades utilizada, e assim que um dos workers torna-se disponvel, o sistema transfere uma tarefa para este n. Outro fator que torna o MapReduce um modelo ideal para processamento de grandes quantidades de dados, a capacidade de transferir o cdigo para os ns que armazenam estas informaes. Dessa forma, os dados so processados em sua unidade local, e caso um processo necessite das informaes de um n que esteja executando alguma funcionalidade, o sistema replica estes dados (atravs da rede) para ns ociosos a fim de executar as atividades pendentes. Um grande avano para os sistemas que utilizam este modelo o fato de escolher computadores que se encontram no mesmo datacenter, para que no seja preciso a utilizao de uma maior largura de banda. O processo de sincronizao auxilia na confiabilidade do sistema, pois se trata de um compartilhamento de informaes. Tanto mappers quanto reducers precisam garantir que os dados estejam sincronizados de acordo com suas referncias atravs da camada shuffle and sort. Esse tipo de organizao necessita que os dados sejam copiados e transferidos pela web, e no caso de utilizarem M mappers e R reducers, a quantidade de dados trafegados pela rede dever ser o produto desses dois agentes, ou seja, M x R. possvel verificar que os reducers necessitam dos resultados gerados pelos mappers. Neste caso, alguns ns que utilizam a funo reduce devero esperar por uma resposta da funo map. O Hadoop20 desenvolveu uma soluo para evitar a ociosidade entre as mquinas. Quando um mapper emite alguma resposta, essa automaticamente transferida para o reducer, ou seja, medida que as respostas so emitidas, elas so replicadas e transferidas imediatamente para que um n possa process-la.
20

http://hadoop.apache.org/.

34

As prticas de diviso e conquista so bem aplicadas neste modelo, notvel o ganho quanto ao desempenho do sistema. Porm ainda existe um desafio para a organizao dos dados processados. Com o modelo organizado desta forma, a criao dos arquivos pelo reducer poderia gerar um alto ndice de informaes descentralizadas. Em cada cluster de mquinas poderia ser encontrado uma parte das informaes necessrias para o usurio, contribuindo para o aumento do trfego de dados pela rede, diminuindo o desempenho do sistema. Como uma forma de solucionar esse problema, foram criados dois elementos cuja finalidade organizar e direcionar as informaes que possuem alguma relao. O primeiro agente conhecido como combinador (combiner), sua funo realizar o agrupamento dos valores que possuem a mesma chave em comum. Este tipo de implementao auxilia o desempenho do sistema, pois evita que mais dados sejam trafegados entre os diversos clusters. Trata-se basicamente de um agrupamento, realizado localmente, antes mesmo das sadas dos mappers. O segundo elemento que trouxe benefcios ao desempenho do modelo MapReduce denominado particionador (partitioner), este por sua vez, garante a classificao dos pares chave-valor em diversas mquinas. Dessa forma, os dados que possuem a mesma chave so alocados em um nico local para evitar fragmentao das informaes. Dessa forma, toda informao que possuir uma chave de mesmo valor (geralmente essa comparao feita a partir de uma funo hash) ser direcionada a um determinado computador, gerando um conjunto de dados que possuem alguma semelhana (na maioria dos casos), direcionado a um determinado reducer. A Figura 3.5 apresenta uma exemplificao de como atuam esses dois procedimentos. Os combiners realizam um agrupamento dos valores gerados pelo mapper. Dessa forma, evita-se a transmisso desnecessria de informaes, melhorando o desempenho do sistema, pois a combinao realizada antes mesmo da informao ser enviada a um reducer. No caso dos partitioners, cada par de chave-valor dever ser redirecionado a um determinado reducer, ou seja, sua principal funcionalidade direcionar cada informao um determinado n, de acordo com as especificaes do programa. Os Sistemas distribudos foram mostrados apenas como uma tcnica capaz de solucionar diversos casos de processamentos de dados. Em ambientes cuja comunicao ocorre atravs da comutao de mensagem pela web, erros so bastante frequentes, podendo

35

ocorrer falhas na conectividade ou em um hardware de um n, ou seja, nenhum sistema est livre de problemas.

Figura 3.5: Modelo de organizao do MapReduce apresentando os procedimentos realizados pelos Partitioners e Combiners. A camada shuffle and Sort, trata de agrupar todos os valores que possuem uma chave em comum. (LIN; DYER, 2010, p. 30).

O master verifica periodicamente se os workers esto conectados rede atravs do comando ping21, caso nenhuma resposta seja recebida, ento o n recebe uma marcao informando que o mesmo encontra-se inativo. Se um determinado n inacessvel estivesse realizando alguma tarefa map ou reduce, ento esta atividade torna-se elegvel para o escalonador e poder ser executada novamente por outra mquina. Todos os demais workers so informados que ocorreu uma falha em um determinado n e devero apontar suas referncias de um conjunto de dados especifico, ou seja, ao novo n que executou a tarefa da mquina defeituosa. O modelo MapReduce um sistema bastante robusto e tolerante a falhas,

21

O commando ping utilizado para verifica se as mquinas esto conectadas na rede, este utiliza o protocolo ICMP que envia vrias mensagens para um determinado computador. A sintaxe para a execuo deste comando realizada pelo comando ping endereo, onde o endereo especifica o IP da mquina que recebe r a mensagem.

36

mesmo que um grupo de mquina estejam inacessveis, o master detecta falhas no sistema e reexecuta todas as tarefas incompletas. notvel que o sistema tolerante a falhas somente verifique problemas em ns workers. Em uma situao onde a falha ocorre no n master, o sistema poder parar. No entanto, uma cpia do master iniciada e o trabalho poder ser reexecutado a partir de um checkpoint. A Figura 3.6 ilustra uma distribuio hierrquica dos ns em um sistema, o programa do usurio executa o n master que transfere as funes aos respectivos workers, os mappers e os reducers a partir de uma biblioteca MapReduce. Nota-se que toda sada da funo map armazenada em um arquivo localmente.

Figura 3.6: Distribuio de um modelo MapReduce, demonstrando todas os passos do processo. (DEAN; GHEMAWAT, 2004, p 3)

O exemplo da Figura 3.6 trata-se de um diagrama idealizado e utilizado por Dean e Ghemawat. O programa do usurio inicia todo o processo executando a funo MapReduce. Primeiramente, a biblioteca do sistema separa os arquivos em M partes de tamanhos variados

37

entre 16 e 64 MB. Aps a separao dos arquivos, o programa do usurio inicia vrias cpias do processo em vrios ns de um cluster (executado na marcao 1 da Figura 3.6)22. O dispositivo que recebe a cpia do sistema master, tem como principal funo associar as funes map e reduce aos ns workers (2). Assim como os arquivos separados, existem M ns mappers e R reducers. A associao das funes realizada somente aos ns que se encontram ociosos. Cada um dos M arquivos dever estar associado aos workers que receberam a tarefa de executar a funo map (3). A sada desses processos estar armazenada em um buffer de memria e assim que concluda, devero ser escritas em disco local (4). Aps serem armazenados localmente, os Mappers passam a localizao exata dos arquivos para o master que dever informar aos reducers onde procurar as informaes necessrias para a execuo do processo. Quando um reducer notificado sobre a localizao de um determinado arquivo localizado em um mapper, este executa uma chamada RPC para copiar as informaes para a memria (5), as informaes sero copiadas, classificadas e agrupadas de acordo com os dados que possuem a mesma chave em comum. Caso a quantidade de dados seja maior que o esperado, e o n no possua capacidade de process-lo, ento dever ser necessria a utilizao de um recurso externo para executar o processo de classificao e agrupamento dos dados. Aps todos os dados serem copiados e processados, os resultados da operao reduce devero gerar um arquivo e armazen-lo localmente em um n reducer (6). Aps todas as funes serem executadas, o master notificado e envia uma mensagem ao programa do usurio informando que o processo foi concludo conforme solicitado. O resultado gerado pelo programa MapReduce apresenta como sada um conjunto de R arquivos, um para cada Reducer. Cada sada poder ser processada novamente por um novo programa MapReduce ou armazenada em um sistema de arquivos distribudo, conforme as regras especificadas pelo programador.

3.7 Consideraes Finais


O MapReduce pode ser definido de diversas formas distintas: pode referir-se a um modelo de programao desenvolvido por Dean e Ghemawat, ou ser visto como um
22

Na Figura 3.5 foi apresentada a criao dessas copias utilizando o comando fork, porm a utilizao desse comando s ocorre em sistemas locais, no podendo ser executado em ambientes distribudos. Trata-se apenas de um conceito onde auxilia no entendimento das etapas do processo MapReduce.

38

framework em execuo que manipula e gerencia a execuo de alguns programas especficos, ou at mesmo ser atribudo a uma implementao especifica que utiliza o modelo de programao junto a um framework, tais como a implementao realizada pela Google ou o Hadoop, sistemas que esto se popularizando cada vez mais devido ao seu alto poder de escalabilidade e desempenho. Os conceitos apresentados anteriormente expressam corretamente o que vem a ser este modelo. Porm o MapReduce vai alm destas definies. Trata-se de uma ideologia capaz de classificar os dados, process-los e indexar os resultados de forma rpida e eficiente. Podendo ser aplicado a inmeros problemas, onde cada entidade receber uma determinada funo para aplic-la junto informao que recebera, com o mnimo de trfego na rede. Grande parte do processamento executado localmente. As tarefas so divididas em grupos de M mappers e R reducers, para o master a quantidade de escalonamento a ser realizado na ordem de O (M + R) e mantm O (M * R) estados em memria (DEAN; GHEMAWAT. 2004. p. 5). A quantidade de espao armazenado na memria mnima, aproximadamente 1 (um) byte por worker (no modelo do Google File System, que ser abordado na prxima seo). O MapReduce se popularizou entre os diversos sistemas da atualidade, empresas utilizam o conceito deste modelo para garantir desempenho, escalabilidade e agilidade no desenvolvimento de aplicaes para sistemas fracamente acoplados. Diversas empresas como a Microsoft, Amazon e a Yahoo utilizam este modelo para o processamento de grandes quantidades de dados e ferramentas como a API Google garantem a abstrao das mquinas para os programadores, mesmo os que no possuem experincias com ambientes distribudos podem com facilidade implementar diversas aplicaes. Outro fator importante o processamento dos dados em mquinas locais, esse artifcio auxilia o desempenho de diversas funes ao longo do sistema e permite um melhor balanceamento de carga, pois gerencia os dados associando-os a mquinas que aguardam por algum processo. Dessa forma, vrios processos podem ser executados paralelamente sem a preocupao de sobrecarga de maquinas. At o presente momento, foram apresentados somente exemplos de algoritmos fictcios para a resoluo de simples problemas, a prxima seo dever abordar um estudo de caso sobre diversas ferramentas utilizadas por grandes empresas que disponibilizam seus servios atravs das nuvens com alto desempenho e integridade das informaes.

39

4 ESTUDO DE CASO
At o presente momento foram apresentados conceitos do que vm a ser e como so processados os dados do MapReduce. Nesta seo sero abordados sistemas que utilizam este modelo para o processamento de grandes conjuntos de dados com alto desempenho. O desenvolvimento de sistemas que utilizam essa forma de implementao est aumentando cada vez mais todos os dias, empresas como a Facebook, LinkedIn e o Twitter, adotaram a implementao de ferramentas que abordam este conceito com o intuito de melhorar o poder de resposta. Para estes sistemas necessrio que as informaes sejam lidas e escritas de forma rpida e segura, garantindo a confiabilidade do sistema.

4.1 Google File System - GFS


O Google File System trata-se de um sistema de arquivos distribudos proveniente da Google. Inicialmente foi projetado para ser um sistema utilizado para atender s necessidades relacionadas ao armazenamento e processamento de grandes conjuntos de dados. utilizado para diversas finalidades e desenvolvido em clusters que alocam centenas ou at milhares de ns. O maior j implementado, utiliza um conjunto de 1000 ns, com uma capacidade acima de 300 terabytes, podendo ser acessado por centenas de clientes em diferentes mquinas simultaneamente e em bases continuas (GHEMAWAT, 2003, p. 1). Esse sistema visa atender s demandas de um problema que vem crescendo constantemente: a capacidade de processamento de dados em larga escala, garantindo a escalabilidade, confiabilidade e disponibilidade das informaes. Uma das facilidades do GFS est na sua interface simples e intuitiva, semelhante aos sistemas de arquivos comuns. Sendo organizados de forma hierrquica atravs de diretrios e especificados por identificadores, como os nomes dos arquivos e o caminho onde esto alocados. Alm das questes de acesso, a interface suporta diversas operaes, como a abertura de arquivos, leitura, escrita e remoo do mesmo. A principal motivao do GFS garantir a segurana das informaes contidas no sistema. Falhas podem ocorrer a qualquer momento, portanto necessrio garantir um sistema que possa solucionar esses problemas, utilizando estratgias como a replicaes de dados e o monitoramento dos dispositivos que compem o sistema. Outra preocupao do sistema de

40

arquivos da Google garantir a manipulao e o gerenciamento de grandes conjuntos de dados, visando sempre que esses arquivos esto sendo constantemente acessados. Dessa forma necessrio criar um sistema que seja rpido o suficiente para a leitura dessas informaes. Os dados acessados podem ser alterados de forma concorrente, ou seja, vrios usurios podem alterar os mesmos elementos atravs do mecanismo de record append, ao mesmo tempo que garante tambm a atomicidade do arquivo. A arquitetura do sistema GFS, consiste na mesma idia do MapReduce, onde existem ns separados por uma hierarquia de funcionalidade. O master (assim mesmo chamado) designado para manipular todos os demais ns (workers), associando a cada mquina uma determinada atividade a ser realizada. Esses so conhecidos como chunkservers e acessados por mltiplos clientes. Assim como no MapReduce, os dados so separados em blocos, denominados chunks. Cada bloco possui pequenas informaes sobre a sua criao, conhecidas como manipuladores de blocos (chunk handle), esses elementos so imutveis e nicos para o sistema. Cada chunk armazenado nos chunkservers como um arquivo e possui um tamanho fixo de 64 MB (por padro), podendo ser alterado caso seja necessrio, para evitar a fragmentao interna23. A grande vantagem de separar os dados em blocos ocorre devido s questes de desempenho. Um cliente no necessita solicitar escrita e leitura de arquivos ao master, essas aes podem ser realizadas diretamente ao chunk, evitando uma grande sobrecarga do servidor central. Esse procedimento ser explicado futuramente nesta seo. As informaes sobre cada chunk armazenada pelo master, que replica os blocos por todo o sistema (por padro, so replicados para outros trs ns do cluster). A principal funo do master garantir o controle do sistema. Para isso, necessrio que ele obtenha informaes de todos os chunkservers. Essas informaes so conhecidas como metadados, que possui dados relacionados ao arquivo, a localizao de cada chunk e tambm o namespace24. As informaes referentes ao mapeamento dos dados e a sua localizao, so armazenadas em logs pelo master. Dessa forma, dados sobre os chunkservers so armazenados em locais separados, para que as informaes possam continuar persistentes em caso de falha do n master. Alm da segurana, outra vantagem do uso de logs dentro do sistema, ocorre por questes de desempenho. possvel que o master possa replicar alguns
23

A fragmentao interna consiste na perda de espao em blocos de tamanho fixo. A fragmentao ocorre quando os espaos dos blocos no so preenchidos por completo. 24 Um namespace contm informaes relevantes sobre um determinado arquivo, como o seu identificador, seu caminho e outras demais informaes necessrias para garantir que esse seja um arquivo nico dentro do sistema. Assim como nos sistemas de arquivos comuns.

41

chunks para diminuir a sobrecarga dos chunkservers, alm de garantir a limpeza do sistema, utilizando o mecanismo de garbage collection. O Google File System utiliza diversas estratgias de desempenho. Porm a utilizao de alguns artifcios para essa finalidade, como no caso da memoria cache, so raramente utilizadas. Nesse caso, a utilizao desse mecanismo s valida no armazenamento dos metadados. Um chunkserver no necessita colocar os arquivos em cache, uma vez que esses esto alocados em um disco local. Por outro lado os clientes tambm no precisam armazenar em cache esses arquivos, devido complexidade existente na alocao de grandes conjuntos de dados em mquinas cliente. A utilizao do cache para armazenar informaes importantes ao invs de incluir dados, trouxe simplicidade ao modelo. Devido a esse artificio, possvel que o n master possa executar suas tarefas sem ser sobrecarregado por vrias solicitaes dos clientes. Dessa forma, evita a criao de um gargalo, pois clientes no lem ou escrevem atravs de requisies ao master, apenas solicitam qual a localizao de um determinado chunk. Todas as alteraes de uma determinada informao so realizadas diretamente entre o cliente e o chunkserver. A Figura 4.1 apresenta o modelo de funcionamento do GFS (GHEMAWAT; LEUNG; GOBIOFF, 2003, p. 3). Primeiramente o cliente solicita ao master a localizao do chunk, enviando o nome e o ndice do arquivo. Em seguida a aplicao recebe como resposta, o chunk handle e a localizao dos chunks no sistema. O cliente armazena essas informaes em cache, utilizando como ndice os parmetros utilizados na solicitao realizada inicialmente ao master. A partir desse momento toda a comunicao realizada com o chunkserver, que recebe requisies do cliente, sendo essas o chunk hadle e o ndice dentro do chunk. possvel que sejam solicitadas ao Master diversas solicitaes de um mesmo cliente, dessa forma a resposta dessas requisies podem conter vrias informaes de diversos chunks. Esse conjunto de informaes enviadas ao cliente auxilia no desempenho da aplicao, pois evita ao mximo a comunicao do master com o cliente. O Google File System mostrou ser um modelo bastante eficiente para armazenamento de grandes conjuntos de dados. Alm de garantir o armazenamento de grandes quantidades de dados, possui um alto poder de respostas s requisies dos clientes. Realizando um balanceamento de carga eficiente atravs de replicaes de dados entre os servidores e utilizando estratgias para diminuir a quantidade de requisies ao master. Atualmente, esse sistema vem sendo utilizado constantemente pela Google em plataformas de armazenamento e

42

desenvolvimento do sistema, tanto para pesquisas quanto para servios disponibilizados na web.

Figura 4.1: Modelo do Google File System. (GHEMAWAT; LEUNG; GOBIOFF, 2003, p. 3)

4.2 Hadoop
O Hadoop uma verso Open-Source do MapReduce, desenvolvida na linguagem de programao Java e comumente utilizada para o processamento de grandes conjuntos de dados. Inicialmente foi criado por Doug Cutting e adquirido pela Apache Software Foudations, possui a Yahoo como uma das maiores organizaes que investem neste projeto. Atualmente a popularizao dessa ferramenta vem crescendo de forma acelerada. Empresas como o Facebook, IBM e Twitter adotaram esse sistema para o gerenciamento e manipulao das suas informaes. Esta seo apresentar uma viso superficial do Hadoop, com nfase nas tcnicas abordadas pelo MapReduce e pelo processamento distribudo, demonstrando qual a sua finalidade dentro do universo da tecnologia da informao. O grande sucesso da popularizao do Hadoop entre diversas empresas pelo fato de se tratar de um sistema capaz processar vrias informaes de aplicaes em ambientes distribudos, processando com eficincia e velocidade, grandes quantidades de dados. Trata-se de uma ferramenta executada em sistemas de clusters, para que clientes possam enviar requisies e receber respostas com alto desempenho, seguindo a linha de toda aplicao MapReduce: Write once, read many. A grande vantagem da utilizao deste sistema a sua capacidade de ser escalvel, robusto, acessvel e fcil de implementar. possvel criar

43

cdigos que possam ser processados em paralelo de forma rpida e simples, dentro de um ambiente com uma arquitetura linearmente escalvel e tolerante a falhas. A Figura 4.2 apresenta uma ilustrao de um sistema executando a ferramenta Hadoop.

Figura 4.2: Utilizao do Hadoop em um Cluster que aloca e processa grandes conjuntos de dados. O cliente solicita uma requisio e recebe uma resposta com alto desempenho.

Neste sistema cada solicitao do cliente realizada dentro de uma nuvem e retornada rapidamente. A grande vantagem das aplicaes Hadoop o fato de utilizarem uma das caractersticas mais importantes do modelo MapReduce, a transferncia de cdigo entre os ns de um cluster. Dessa forma, no h necessidade de transmitir de dados por todo o ambiente. Apenas cdigos so encaminhados para os ns que possuem uma determinada informao e ento executados localmente. Em um ambiente Hadoop, os ns so separados de forma hierrquica. Para o n master, foi designado a nomenclatura de jobTracker, enquanto os Workers foram denominados taskTrackers, seguindo o mesmo raciocnio da organizao vista no capitulo anterior. As entradas so separadas em blocos de 64 MB (por padro), podendo ser alterada conforme a escolha do programador. Trata-se de arquivos intermedirios denominados chunks, esses devero ser processados em paralelo pelos ns de um cluster. A sada de um n reducer, dever ser replicada em um sistema de arquivos distribudos.

44

4.2.1 Hadoop Distributed File System


Para entender melhor o funcionamento do Hadoop, preciso entender como funciona o seu sistema de arquivos, conhecido como Hadoop Distributed File System (HDFS). Foi desenvolvido para armazenar grandes conjuntos de dados e uma alta capacidade de streaming de dados. O HDFS separa uma grande quantidade de informao em pequenos blocos e armazena esses blocos no sistema. A grande vantagem de incluir um arquivo em partes ocorre devido fato de um arquivo poder ser grande o suficiente para no caber em um nico n. Outro fator importante a simplificao de um sistema de arquivos distribudos, onde possvel verificar a quantidade de blocos que pode ser includo em cada n (sem a necessidade de criar arquivos de metadados para delimitar permisses de onde esses arquivos podem ser armazenados). Dados tambm podem ser replicados ao longo de todo o sistema, garantindo um ambiente tolerante a falhas e de alta disponibilidade. No sistema HDFS, existe uma estruturao semelhante hierarquia dos ns, seguindo a mesma viso do framework MapReduce (Google) e do Hadoop. Um n master denominado namenode, enquanto os ns workers so conhecidos como datanodes. O gerenciamento de todo o sistema de arquivos fica por parte do namenode. Ele mantm informaes de todos os datanodes e a localizao de cada bloco, alm de conter uma rvore de arquivos e seus respectivos metadados, que armazena informaes sobre esses arquivos e seus diretrios (WHITE, 2009, p. 65). A grande dificuldade do HDFS manter um sistema seguro e tolerante a falhas, porm toda essa preocupao s direcionada aos datanodes. Caso o namenode venha a falhar, todas as informaes quanto aos blocos de arquivos seriam perdidas. de extrema importncia garantir a vitalidade desse n, pois caso haja alguma falha, todas as informaes estariam perdidas e desencontradas, causando danos irreparveis ao sistema. Para este tipo de situao, so realizadas rotinas de backup dos metadados e dos estados de cada datanode. Outra implementao do Hadoop para manter a segurana do namenode, a criao de um n auxiliar, cuja finalidade garantir uma cpia, tal como uma imagem, do n master. A Figura 4.3 apresenta uma arquitetura do funcionamento do HDFS. O namenode gerencia e manipula todas as informaes dos arquivos, tal como a localizao e o acesso. Enquanto os datanodes se encarregam da leitura e escrita das informaes nos sistemas de arquivos cliente.

45

Figura 4.3: Arquitetura do modelo de arquivos do Hadoop (HDFS). (Fonte: http://hadoop.apache.org/common/docs/r0.17.0/hdfs_design.html).

Analisando a estrutura do HDFS e do Hadoop, notvel que ambos implementam o modelo MapReduce, e portanto de suma importncia esclarecer diferenas quanto s partes que compem os dois sistemas. O Hadoop um framework utilizado para aplicaes distribudas, enquanto o HDFS utilizado para armazenamento das informaes processadas pelo Hadoop. Em ambos sistemas implementado o modelo master-workers proveniente do MapReduce.

4.2.2 Interface Hadoop


A grande dificuldade para um programador verificar se seus dados esto consistentes dentro da aplicao. Uma vez que o modelo MapReduce trata todo e qualquer arquivo de um sistema em blocos distribudos por diversos ns. Para este tipo de problema, a Apache utilizou softwares para capazes de verificar os dados contidos no Hadoop ou em seu sistema de arquivos. Esses tipos de programas so designados para fornecer uma interface ao sistema e so comumente utilizados no HDFS, por questes obvias, pois necessrio verificar se os dados esto sendo armazenados corretamente. Uma das interfaces mais utilizadas por esse sistema chamada de Thrift (WHITE, 2009, p. 49). Trata-se de uma interface que auxilia outras linguagens no acesso s informaes dentro do sistema. Como mencionado no inicio deste capitulo, o Hadoop, assim como o HDFS, so sistemas desenvolvidos inicialmente na linguagem Java e logo possuem certas restries quanto s aplicaes que no foram desenvolvidas nessa linguagem. A

46

utilizao do Thrift s possvel com a utilizao de um servidor Java em execuo, pois ele fornece suporte vrias linguagens, tais como PHP, C++ e Ruby, atravs de stubs prgerados. Outras interfaces so bem populares em sistemas HDFS e Hadoop como o FUSE, que utiliza uma biblioteca conhecida como libhdfs, desenvolvida na linguagem C para acessar os sistemas de arquivos do Hadoop. Essa biblioteca utiliza uma interface Java Nativa (JNI) para acessar as informaes do sistema.

4.3 Aplicaes MapReduce em Sistemas Reais


O MapReduce trouxe grandes benefcios a diversas aplicaes. Um dos casos da utilizao deste modelo em sistemas reais a implantao da ferramenta Hadoop no site Last.fm25 (WHITE, 2009, p. 405). Trata-se de uma aplicao voltada ao contedo musical, que ao longo do tempo evoluiu de milhares para milhes de pessoas. Os usurios dispem de informaes rpidas e precisas, manipulando, alocando e gerenciando os dados no sistema. Devido a essa sobrecarga, foi adotada a ferramenta Hadoop, que trouxe um bom resultado ao site em termos de desempenho e segurana. O sistema Last.fm possui uma infra-estrutura de clusters, garantindo a escalabilidade da aplicao. Esse tipo de estrutura fornece uma melhor eficincia ao site. Outro beneficio trazido pelo Hadoop, a utilizao de logs de usurios e a replicao de dados dentro do sistema, fornecendo a segurana das informaes de uma maneira simples e transparente. Por se tratar de um software Open-Source, possvel desenvolver novas funcionalidades ao sistema utilizando uma API clara e concisa. Em 2009, o site Last.fm era composto de dois clusters Hadoop, com mais de 50 mquinas em processamento, utilizando 300 cores e com uma capacidade de 100 terabytes. Inmeras operaes so realizadas diariamente, gerando informaes relevantes para o estudo da performance do sistema, como a anlise de arquivos de log, avaliao de testes em mquinas e gerao de grficos do sistema. Outro caso de sucesso do modelo MapReduce, encontrado na rede social do jovem Mark Zuckerberg. O Facebook necessitava de um sistema que pudesse armazenar a sua
25

O site Lasft.fm foi desenvolvido em 2002, com o intuito de oferecer servios de radio e musica para os usurios. Calcula-se que 25 milhes de pessoas utilizam este site mensalmente. Disponvel em <http://www.lastfm.com>. Acesso em 23 Mai.

47

imensa carga de logs, gerada diariamente pelos seus usurios. A base de dados utilizada no era suficiente para lidar com uma alta carga de informaes. Para solucionar esse problema, foram colocadas algumas instncias do Hadoop no sistema. O resultado foi bem sucedido, devido simplicidade com que o sistema realizava suas operaes. A evoluo da ferramenta Open-Source de alta escalabilidade dentro do Facebook s se popularizou dentro da corporao, aps o desenvolvimento do Hive26, uma interface capaz de realizar consultas SQL em cima da plataforma Hadoop. No ano de 2009, o Facebook possua o segundo maior cluster Hadoop do mundo (WHITE, 2009, p. 415), com um espao superior a 2PB, processando mais de 10TB de informaes diariamente. O sistema possui um conjunto de 2.400 cores e cerca de 9TB de memria. O desenvolvimento da ferramenta Hive trouxe grandes benefcios ao Hadoop, sendo uma ferramenta adotada nos diversos subprojetos da Apache, que auxiliam no gerenciamento dos sistemas de alta escalabilidade.

26

http://hive.apache.org/

48

5 CONCLUSO
A computao distribuda consiste em um conjunto de dispositivos trabalhando em paralelo, para atender com eficincia os servios disponibilizados pelo sistema, seja ele um cluster ou um grid. A criao de um ambiente distribudo contribuiu com o desenvolvimento dos datacenters, que puderam aperfeioar seus recursos, sem a utilizao de mquinas de grande porte, como no caso de um supercomputador. Desta forma, uma corporao poderia implantar um ambiente altamente robusto e eficiente, utilizando mquinas de pequeno porte e de baixo custo, se comparadas a uma mquina high-end. A criao de um ambiente distribudo ir fornecer um sistema eficiente e com alto poder de resposta. Alm de garantir maior disponibilidade e interoperabilidade dos servios, utilizando uma infra-estrutura escalvel e tolerante a falhas. Esse modelo organizacional trouxe grandes benefcios para aplicaes de grande porte. Porm, trata-se de sistemas complexos, que precisam ser bem estruturados e para isso necessitam de profissionais que possuam grande conhecimento na rea. Uma simples falha estrutural poderia causar danos cruciais para uma corporao. Outra desvantagem est relacionada ao desenvolvimento de aplicaes em ambientes dessa natureza. necessrio que o programador tenha um alto conhecimento, para que possa desenvolver servios em aplicaes distribudas. Para esse problema, foram criados mecanismos capazes de abstrair o problema da implementao ambientes distribudos, utilizando interfaces e padres, tais como a OpenMP e a MPI. O MapReduce mostrou ser um excelente modelo para a computao distribuda. possvel criar aplicaes que possam processar terabytes de informaes sem causar uma exagerada sobrecarga ao sistema. Dessa forma, milhares de usurios podem desfrutar de sistemas que contenham inmeras informaes, com um elevado poder de resposta. A abordagem deste modelo tambm se baseia no conceito de transparncia, auxiliando no desenvolvimento de aplicaes, sem que o programador tenha experincia alguma com ambientes distribudos. Trata-se de um sistema seguro, que possui um mecanismo de processamento paralelo, utilizando tcnicas de balanceamento de carga e um alto poder de indexao de dados. O modelo possui simplicidade em sua arquitetura, onde os dispositivos so separados conforme suas funes. Cada informao processada localmente, ao invs de ser transmitida pela rede, evitando um aumento no trfego de dados dentro do sistema. Outra preocupao que o modelo possui, a probabilidade da ocorrncia de problemas entre os ns do sistema.

49

Nesse caso, a importncia de desenvolver um sistema tolerante a falhas garantida a partir de vrios mecanismos, como o uso da replicao de dados e a verificao de logs de cada dispositivo, analisando o estado e o comportamento de cada componente. importante afirmar que a utilizao da computao distribuda garantiu uma maior expanso dos sistemas. possvel encontrar milhes de usurios comunicando-se e conectando-se graas ao poder dessas aplicaes. Atualmente a quantidade de informaes geradas pelo universo da web, garante que possamos conhecer ambientes e realizar trocas de informaes com o menor esforo possvel. assim que podemos imaginar o futuro para a computao, um ambiente altamente escalvel com uma alta capacidade de armazenamento e um elevado poder de resposta, com o menor custo possvel. O MapReduce apenas o um dos modelos empregados dentro do mbito da computao distribuda. Novas pesquisas so realizadas todos os anos, e novos algoritmos esto surgindo, com um maior poder de processamento, como no caso do novo sistema denominado Caffeine27, utilizado para realizar buscas mais rpidas e melhores. Segundo o Google, idealizador do novo sistema, possvel realizar buscas de sites com at 50% a mais de velocidade do que o motor de busca atual, proveniente do MapReduce.

27

http://googleblog.blogspot.com/2010/06/our-new-search-index-caffeine.html

50

REFERNCIAS BIBLIOGRFICAS

MEIRA, Silvio Romero de Lemos. Introduo a programao funcional. Campinas, SP: UNICAMP. 1988. 290p. DE S, Claudio Cesar e DA SILVA, Marcio Ferreira. Haskell: Uma abordagem Prtica. Novatec. 2006. 296p. PETRICEK, Tomas e SKEET, Jon. Real World Functional Programming. Manning Pubns Co. 2009. 529p. THOMPSON, Simon. Haskell: The Craft of Functional Programming. 2.ed. AddisonWesley. 1999. 528p. HINDLEY, J. Roger e SELDIN, Jonathan P. Lambda-Calculus and Combinators, an Introduction. Cambridge University Press. 2008. 345p. WITTEN, Ian H. e FRANK, Eibe. Data Mining: Pratical Machine Learning Tools and Techniques. Elsevier. San Francisco, CA. 2005. 525p. KSHEMKALYANI, Ajay D. e SINGHAL, Mukesh. Distributed Computing: Principles, Algorithms, and Systems. Cambridge. Cambridge University. 2008. 736p. LIN, Jimmy and DYER, Chris. Data-Intensive Text Processing with MapReduce. Maryland, 2010. Final Pre-Production. Disponvel em <http://www.umiacs.umd.edu/~jimmylin/MapReduce-book-final.pdf>. Acesso 10 Jun. DEAN, Jeffrey. and GHEMAWAT, Sanjay. MapReduce: Simplified Data Processing on Large Clusters. In: Proceedings of Sixth Symposium on Operating System Design and Implementation, San Francisco, CA. December, 2004. Disponvel em <http://labs.google.com/papers/mapreduce-osdi04.pdf>. Acesso em 10 Jun.

51

GHEMAWAT, Sanjay. et al. Bigtable: A Distributed Storage System for Structured Data. In: Proceedings of Seventh Symposium on Operating System Design and Implementation, Seattle, WA. November, 2006. Disponvel em <http://labs.google.com/papers/bigtableosdi06.pdf>. Acesso em 10 Jun. GHEMAWAT, Sanjay, LEUNG, Shun-Tak and GOBIOFF, Howard. The Google File System. In: 19th ACM Symposium on Operating Systems Principles, Lake George, NY. October, 2003. Disponvel em <http://labs.google.com/papers/gfs-sosp2003.pdf>. Acesso em 10 Jun. MOORE, Gordon E. Cramming more components onto integrated circuit. Electronics Magazine. Ano. 8. N. 38, abr. 1965. Disponvel em <ftp://download.intel.com/museum/Moores_Law/ArticlesPress_Releases/Gordon_Moore_1965_Article.pdf>. Acesso em 10 Jun. CORMEN, Thomas H., LEISERSON, Charles E., RIVEST, Ronald L. and STEIN, Clifford. Introduction to Algorithms. 2 ed. McGraw-Hill Book Co. 2002. 1180p. GRAMA, Ananth, GUPTA, Anshul, KARYPIS, George e KUMAR, Vipin. Introduction to Parallel Computing. 2 ed. Addison Wesley. 2003. 856p. PAGINA PESSOAL Karatsuba AnatoliiAlexeevich. Russian Academy of Science: Steklov Mathematical Institute, 2011. Apresenta informaes sobre o autor que desenvolveu o algoritmo de Karatsuba. Disponvel em <http://www.mi.ras.ru/~karatsuba/index_e.html>. Acesso em 10 Jun. ALEXEEVICH, Karatsuba A. The Complexity of Computations. In: Proceedings of Steklov Institute of Mathematics. Vol 211. p. 169-183. Moscou. Janeiro, 1995. Disponvel em <http://www.ccas.ru/personal/karatsuba/divcen.pdf>. Acesso em 10 Jun. LAM, Chuck. Hadoop in Action. Manning Publications Co. 2011. 311p. WHITE, Tom. Hadoop: The Definitive guide. OReilly. 2009. 501p

52

RAJARAMAN, Anand e ULLMAN, Jeffrey D. Mining of Massive Datasets. Stanford University. 2010. 320p. Disponvel em <http://infolab.stanford.edu/~ullman/mmds.html>. Acesso em 10 Jun. SILBERSCHATZ, Abraham, GALVIN, Peter P. e GAGNE, Greg. Sistemas Operacionais: Conceitos e Aplicaes. Editora Campus. 1999. 571p. SILBERSCHATZ, Abraham, GALVIN, Peter P. e GAGNE, Greg. Fundamentos de Sistemas Operacionais. 6 ed. LTC Editora. 2002. 557p. CARNEGIE MELLON UNIVERSITY. The Andrew Project: What is Andrew? Disponvel em <http://www.cmu.edu/corporate/news/2007/features/andrew/what_is_andrew.shtml>. Acesso em 10 Jun. ANTONOPOULOS, Nick e GILLAM, Lee. Cloud Computing: Principles, Systems and Applications. Springer. 2010. 373p. VELTE, Anthony T., VELTE, Toby J. e ELSENPETER, Robert. Cloud Computing: A Practical Approach. McGrall Hill Co. 2010. 327p. APACHE HADOOP. The Hadoop Distributed File System: Architecture and Design. Disponvel em <http://hadoop.apache.org/common/docs/r0.17.0/hdfs_design.html>. Acesso em 10 Jun.