Академический Документы
Профессиональный Документы
Культура Документы
3
Apache Hadoop: conceitos tericos e prticos, evoluo e
novas possibilidades
Alfredo Goldman, Fabio Kon, Francisco Pereira Junior, Ivanilton Polato e Rosangela de Ftima
Pereira
Abstract
Advancements on the Internet popularity over the last decade and the increase in
volume and complexity of services available on the Web led to the generation of massive
amounts of data. To process these data, both performance and availability are critical
factors that need to be evaluated since conventional data management mechanisms may
not provide adequate support. One existing solution is the Apache Hadoop, a
framework for storage and processing data at large-scale. Hadoop offers as main tools
MapReduce, responsible for distributed processing, and the Hadoop Distributed File
System (HDFS), for storing large data sets in a distributed way. Apache Hadoop has
been considered an effective tool and is currently used by large corporations such as
IBM, Oracle, Facebook, and Yahoo! among others. This course will introduce the main
concepts of the Apache Hadoop framework, demonstrating its features, advantages,
applications, components, and a study of new trends on this tool.
Resumo
O grande avano na popularizao da Internet na ltima dcada bem como o aumento
na quantidade e complexidade dos servios oferecidos na Web levou gerao de
quantidades massivas de dados. Para o processamento desses dados, desempenho e
disponibilidade so fatores crticos que precisam ser avaliados, pois mecanismos
convencionais de gerenciamento de dados no oferecem o suporte adequado. Uma
soluo proposta o Apache Hadoop, um arcabouo para o armazenamento e
processamento de dados em larga escala. O Hadoop oferece como ferramentas
principais o MapReduce, responsvel pelo processamento distribudo, e o Hadoop
Distributed File System (HDFS), para armazenamento de grandes conjuntos de dados,
tambm de forma distribuda. Embora recente, o Apache Hadoop tem sido considerado
uma ferramenta eficaz, sendo utilizado por grandes corporaes como IBM, Oracle,
Facebook, Yahoo! entre outras. Este curso apresentar os conceitos principais do
Apache Hadoop, demonstrando tambm suas caractersticas, vantagens, aplicaes,
componentes, bem como um estudo das novas tendncias em torno dessa ferramenta.
3.1. Computao Paralela, Big Data e Hadoop
Um dos grandes desafios computacionais da atualidade armazenar, manipular e
analisar, de forma inteligente, a grande quantidade de dados existente. Sistemas
corporativos, servios e sistemas Web, mdias sociais, entre outros, produzem juntos um
volume impressionante de dados, alcanando a dimenso de petabytes dirios (White,
2010). Existe uma riqueza muito grande de informaes nesses dados e muitas empresas
no sabem como obter valor a partir deles. A maioria desses dados armazenada em
uma forma no-estruturada e em sistemas, linguagens e formatos bem diferentes e, em
muitos casos, incompatveis entre si.
Esses gigantescos conjuntos de dados tm se tornando uma valiosa fonte de
informao. Isso porque, as detentoras desses dados passam a ser avaliadas no somente
pela inovao de suas aplicaes, mas tambm pelos dados que elas mantm e
principalmente pela potencialidade que eles podem por ventura trazer. A empresa
Google no possui um alto valor agregado somente por seu poderoso algoritmo de
busca de pginas Web e seus inmeros servios disponveis, mas tambm por manter
um grande volume de dados oriundos de seus usurios. So esses dados que, ao
passarem por anlises, tendem a se tornar valiosos, permitindo a criao de solues
inteligentes e bem direcionadas aos seus usurios.
Outro exemplo no qual pode-se constatar um enorme volume de dados no
Facebook. Inicialmente, o Facebook utilizava em sua infraestrutura um banco de dados
relacional para o armazenamento dos seus dados. Porm, em uma rpida expanso, a
empresa passou de uma quantia de 15 terabytes em 2007, para 700 terabytes em 2010,
tornando essa infraestrutura inadequada (Thusoo, et al., 2010). Em 2012, com cerca de
900 milhes de usurios ativos, e mantendo informaes analticas desses usurios, esse
nmero j ultrapassou os petabytes. Hoje, o Facebook considerado a maior rede social
do mundo e, tambm, uma das empresas mais valiosas.
Baseado nessas e em outras aplicaes que possuem um volume gigantesco de
dados, surgiu o conceito denominado Big Data (IBM, 2011). Esse termo faz meno
no apenas ao volume, mas tambm sua variedade e a velocidade necessria para o
seu processamento. Como existem diversos recursos geradores para esses dados, surge
uma enorme variedade de formatos, alguns estruturados e outros no estruturados. Para
geradores de dados estruturados, temos como exemplos sistemas corporativos e
aplicaes Web; j para os no-estruturados, temos os logs desses sistemas, as pginas
Web, as mdias sociais, celulares, imagens, vdeos, sensores, microfones. Por fim, Big
Data tambm est relacionada velocidade, pois muitas das novas aplicaes precisam
de respostas em um curto prazo e, em muitos casos, em tempo real.
As aplicaes Big Data fazem da computao o mecanismo para criar
solues capazes de analisar grandes bases de dados, processar seus pesados clculos,
identificar comportamentos e disponibilizar servios especializados em seus domnios,
porm, quase sempre esbarram no poder computacional das mquinas atuais. Os ditos
problemas grandes ou complexos chegam a consumir horas ou dias de processamento
nas arquiteturas convencionais. Embora em constante evoluo, os recursos
computacionais convencionais so insuficientes para acompanhar a crescente
complexidade das novas aplicaes.
Impulsionada pela grande demanda de computao e por restries fsicas das
arquiteturas convencionais, a computao paralela e distribuda acena como alternativa
para amenizar alguns dos grandes desafios computacionais. Esse modelo de computao
possui atualmente um papel fundamental no processamento e na extrao de informao
relevante das aplicaes Big Data. Essa computao normalmente realizada em
aglomerados (clusters) e grades computacionais, que com um conjunto de
computadores comuns, conseguem agregar alto poder de processamento a um custo
associado relativamente baixo.
Muito embora a computao paralela e distribuda seja um mecanismo
promissor para apoiar a manipulao das aplicaes Big Data, algumas de suas
caractersticas inibem sua utilizao por novos usurios. Dividir uma tarefa em
subtarefas e ento execut-las paralelamente em diversas unidades de processamento
no algo trivial. Inclusive, se o tamanho e a diviso das subtarefas no forem bem
dimensionados, isso pode comprometer totalmente o desempenho da aplicao. Alm
disso, o programador precisa: extrair a dependncia entre os dados da aplicao;
determinar um algoritmo de balanceamento de carga e de escalonamento para as tarefas,
para garantir a eficincia do uso dos recursos computacionais; e, garantir a recuperao
ou a no interrupo da execuo da aplicao caso uma mquina falhe.
Foi nesse contexto que foi desenvolvido o Apache Hadoop1, um arcabouo
(framework) para o processamento de grandes quantidades de dados em aglomerados e
grades computacionais. A ideia de promover solues para os desafios dos sistemas
distribudos em um nico arcabouo o ponto central do projeto Hadoop. Nesse
arcabouo, problemas como integridade dos dados, disponibilidade dos ns,
escalabilidade da aplicao e recuperao de falhas ocorrem de forma transparente ao
usurio. Alm disto, seu modelo de programao e sistema de armazenamento dos
dados promovem um rpido processamento, muito superior s outras tecnologias
similares. Atualmente, alm de estar consolidado no mundo empresarial, o arcabouo
Apache Hadoop tambm tem obtido crescente apoio da comunidade acadmica,
proporcionando, assim, estudos cientficos e prticos.
3.1.1. Histrico
Desde sua origem at hoje, o Hadoop apresentou uma rpida evoluo. A seguir
apresentamos alguns dos fatos marcantes que nortearam a evoluo e a histria do
Hadoop, como hoje conhecido.
Fevereiro de 2003: a Google buscava aperfeioar seu servio de busca de
pginas Web - ferramenta pela qual ficou mundialmente conhecida - almejando
criar uma melhor tcnica para processar e analisar, regularmente, seu imenso
conjunto de dados da Web. Com esse objetivo, Jeffrey Dean e Sanjay
Ghemawat, dois funcionrios da prpria Google, desenvolveram a tecnologia
MapReduce, que possibilitou otimizar a indexao e catalogao dos dados
sobre as pginas Web e suas ligaes. O MapReduce permite dividir um grande
problema em vrios pedaos e distribu-los em diversos computadores. Essa
tcnica deixou o sistema de busca da Google mais rpido mesmo sendo
1
http://hadoop.apache.org
executado em computadores convencionais e menos confiveis, diminuindo
assim os custos ligados a infraestrutura.
Outubro de 2003: depois do desenvolvimento da tecnologia MapReduce pela
Google, trs de seus funcionrios: Sanjay Ghemawat, Howard Gobioff, e Shun-
Tak Leung, publicaram um artigo intitulado The Google File System
(Ghemawat, Gobioff, & Leung, 2003). Esse trabalho descreve um sistema de
arquivos implementado por eles, chamado Google File System (GFS ou ainda
GoogleFS). O GFS um sistema de arquivos distribudo que foi criado para dar
suporte ao armazenamento e o processamento do grande volume de dados da
Google por meio da tecnologia MapReduce.
Dezembro de 2004: pouco mais de um ano aps a divulgao do GFS, Sanjay
Ghemawat, coautor do artigo sobre o GFS, junto com Jeffrey Dean, que tambm
funcionrio da Google, publicaram o artigo Simplified Data Processing on
Large Clusters (Dean & Ghemawat, 2004), agora sobre o modelo de
programao MapReduce, que foi criado pela Google em 2003. Nesse artigo, os
autores apresentaram os principais conceitos e caractersticas da tecnologia,
porm, sem mencionar muitos detalhes sobre como implement-la.
Dezembro de 2005: o consultor de software Douglas Cutting divulgou uma
implementao do MapReduce e do sistema de arquivos distribudos com base
nos artigos do GFS e do MapReduce publicados pelos funcionrios da Google.
Esta implementao estava integrada ao subprojeto Nutch (White, 2010),
liderado por Cutting, que o esforo da comunidade de software livre para criar
um motor de busca na Web, mais especificamente um rastreador de pginas Web
(web crawler) e um analisador de formato de documentos (parser). Por sua vez,
o Nutch fazia parte de um projeto muito maior chamado Lucene, um programa
de busca e uma API de indexao de documentos.
Fevereiro de 2006: percebendo que enfrentava problemas similares ao de
indexao de pginas da Google, a empresa Yahoo! decide contratar Cutting e
investir para que ele desse andamento a seu projeto de cdigo aberto. Nesse
mesmo ano, o projeto recebe o nome de Hadoop - nome do elefante amarelo de
pelcia do filho de Cutting - deixa de ser parte integrante do Nutch e passa a ser
um projeto independente da Apache Software Foundation.
Abril de 2007: passado mais de um ano da contratao de Cutting, o Yahoo!
anuncia ter executado com sucesso uma aplicao Hadoop em um aglomerado
de 1.000 mquinas. Tambm nessa data, o Yahoo! passa a ser o maior
contribuinte no desenvolvimento do arcabouo. Alguns anos depois, a empresa
j contava com mais de 40.000 mquinas executando o Hadoop (White, 2010).
Janeiro de 2008: o Apache Hadoop, que j se encontrava na verso 0.15.2, tem
lanamento constante de verses com correo de erros e novas funcionalidades
e, nesse ms, se transforma em um dos principais projetos da Apache.
Julho de 2008: uma aplicao Hadoop em um dos aglomerados do Yahoo!
quebra o recorde mundial de velocidade de processamento na ordenao de 1
terabyte de dados. O aglomerado era composto de 910 mquinas e executou a
ordenao em 209 segundos, superando o recorde anterior que era de 297
segundos.
Setembro de 2009: a Cloudera contrata Cutting como lder do projeto. Cloudera
uma empresa que redistribui uma verso comercial derivada do Apache
Hadoop, que integra, em um nico pacote, os subprojetos mais populares do
Hadoop.
Dezembro de 2011: passado seis anos desde seu lanamento, o Apache Hadoop
disponibiliza sua verso 1.0.0. Os desenvolvedores da ferramenta afirmam que
essa verso possui maior confiabilidade e estabilidade em escalonamentos.
Dentre os destaques dessa nova verso, cabe mencionar o uso do protocolo de
autenticao de rede Kerberos, para maior segurana de rede; a incorporao do
subprojeto HBase, oferecendo suporte a BigTable; e o suporte interface
webhdfs, que permite o acesso HTTP para leitura e escrita de dados.
Maio de 2012: no momento em que este captulo escrito, a Apache faz o
lanamento da primeira verso da srie 2.0 do Hadoop.
Na Figura 3.1 apresentado um cronograma no formato linha do tempo do
lanamento de todas as verses disponibilizadas do Hadoop. Do lado esquerdo, esto as
verses estveis e do lado direito as verses beta. possvel perceber o grande apoio da
comunidade observando a quantidade de releases liberadas e o curto intervalo entre
elas.
Estvel Beta
Last.FM (www.last.fm): rdio online agregando uma comunidade virtual com foco em
msica.
Onde usa: anlise de log, anlise de perfil de usurio, teste A/B, outros. Parque:
~ 64 ns de processamento.
The New York Times (www.nytimes.com): uma das maiores empresa jornalstica
mundial.
Onde usa: converso de imagens, armazenamento de jornais digitais. Parque:
utiliza um aglomerado virtual da Amazon.
2
http://wiki.apache.org/hadoop/PowerdBy
Apesar dos valores correspondentes aos parques computacionais no serem
exatos, possvel vislumbrar a infraestrutura das empresas e tambm observar a
diversidade de reas na qual o Hadoop est sendo utilizado.
Por se tratar de um software sob a tutela da Apache Software Foundation, o
Apache Hadoop segue o modelo de licenciamento da Apache3, que bem flexvel, e
permite modificaes e redistribuio do cdigo-fonte. Assim, surgiram no mercado,
diversas implementaes derivadas do Apache Hadoop. Cada uma dessas
implementaes normalmente acrescentam novas funcionalidades, aplicam
especificidades de um nicho de mercado, ou ainda limitam-se a prestao de servios
como implantao, suporte e treinamento. Dentre algumas empresas com estes objetivos
temos a Amazon Web Service, Cloudera, Hortonworks, KarmaSphere, Pentaho e
Tresada. Atualmente, a Cloudera chefiada por Douglas Cutting, um dos criadores do
Apache Hadoop original.
3.1.3. Vantagens
O Apache Hadoop considerado atualmente uma das melhores ferramentas para
processamento de alta demanda de dados. Entre os benefcios de utiliz-lo pode-se
destacar:
Cdigo aberto: todo projeto de software livre de sucesso tem por trs uma
comunidade ativa. No projeto Apache Hadoop, essa comunidade composta por
diversas empresas e programadores independentes partilhando seus
conhecimentos no desenvolvimento de melhorias, funcionalidades e
documentao. Entende-se que essa colaborao remeta a uma possvel melhoria
na qualidade do software devido ao maior nmero de desenvolvedores e usurios
envolvidos no processo. Um maior nmero de desenvolvedores potencialmente
capaz de identificar e corrigir mais falhas em menos tempo. Um nmero maior
de usurios gera situaes de uso e necessidades variadas. Tambm, em um
trabalho cooperativo, os desenvolvedores tendem a ser mais cuidadosos em suas
atividades, pois sabem que sua produo ser avaliada por muitos outros
profissionais. Alm disso, sendo um software de cdigo aberto, tem por
princpio a garantia das quatro liberdades aos seus usurios: liberdade para
executar o programa para qualquer propsito; liberdade de estudar como o
programa funciona e adapt-lo para as suas necessidades; liberdade de
redistribuir cpias do programa; e liberdade para modificar o programa e
distribuir essas modificaes, de modo que toda a comunidade se beneficie;
Economia: podemos apontar neste quesito 3 formas de economia. Primeiro,
como j discutido no item anterior, por ser um software livre, com um esforo
relativamente pequeno possvel implantar, desenvolver aplicaes e executar
Hadoop sem gastar com aquisio de licenas e contratao de pessoal
especializado. Segundo, um dos grandes benefcios para quem faz uso do
Hadoop a possibilidade realizar o processamento da sua massa de dados
utilizando mquinas e rede convencionais. Por ltimo, existe uma outra
alternativa econmica dado pela existncia de servios em nuvem, como a
Amazon Elastic MapReduce (EMR), que permite a execuo de aplicaes
3
http://pt.wikipedia.org/wiki/Licena_Apache
Hadoop sem a necessidade de implantar seu prprio aglomerado de mquinas,
alugando um parque virtual ou simplesmente pagando pelo tempo de
processamento utilizado;
Robustez: um outro diferencial do Hadoop que como ele foi projetado para ser
executado em hardware comum, ele j considera a possibilidade de falhas
frequentes nesses equipamentos e oferece estratgias de recuperao automtica
para essas situaes. Assim, sua implementao disponibiliza mecanismos como
replicao de dados, armazenamento de metadados e informaes de
processamento, que do uma maior garantia para que a aplicao continue em
execuo mesmo na ocorrncia de falhas em algum recurso;
Escalabilidade: enquanto as demais aplicaes similares apresentam dificuldade
em aumentar a quantidade de mquinas utilizadas no processamento e/ou
aumentar o conjunto de dados, precisando em alguns casos at reescrever todo o
cdigo-fonte da aplicao, Hadoop permite obter escalabilidade de forma
relativamente simples. Mudanas no ambiente implicam em pequenas
modificaes em um arquivo de configurao. Dessa forma, o trabalho para
preparar um ambiente contendo mil mquinas no ser muito maior do que se
este fosse de dez mquinas. O aumento no volume de dados s fica limitado aos
recursos, espao em disco e capacidade de processamento, disponveis nos
equipamentos do aglomerado, sem a necessidade de alterao da codificao;
Simplicidade: Hadoop retira do desenvolvedor a responsabilidade de gerenciar
questes relativas computao paralela, tais como tolerncia a falhas,
escalonamento e balanceamento de carga, ficando estas a cargo do prprio
arcabouo. O Hadoop descreve suas operaes apenas por meio das funes de
mapeamento (Map) e de juno (Reduce). Dessa forma, o foco pode ser mantido
somente na abstrao do problema, para que este possa ser processado no
modelo de programao MapReduce.
3.1.4. Desvantagens
Como o Apache Hadoop um arcabouo recente e em constante evoluo, algumas de
suas funcionalidades ainda no esto maduras o suficiente para dar suporte a todas as
situaes pelas quais est sendo empregado. Alm disso, como desvantagem, somam-se
outras dificuldades inerentes ao modelo de programao paralelo. Ressalta-se que
algumas dessas desvantagens listadas a seguir esto, na medida do possvel,
constantemente sendo amenizadas a cada nova verso disponibilizada do arcabouo.
nico n mestre: a arquitetura do Hadoop tradicionalmente utiliza vrias
mquinas para o processamento e armazenamento dos dados, porm, contm
apenas um n mestre. Esse modelo pode se tornar restritivo a medida que essa
centralidade causar empecilhos na escalabilidade e ainda criar um ponto crtico,
suscetvel a falha, uma vez que o n mestre vital para o funcionamento da
aplicao.
Dificuldade no gerenciamento do aglomerado: um dos maiores problemas
sofridos pelos desenvolvedores de computao paralela ocorre no momento de
depurar a execuo da aplicao e de analisar os logs que esto distribudos.
Infelizmente, com o Hadoop, tambm ocorrem essas mesmas dificuldades,
entretanto, existem subprojetos do ecossistema Hadoop que procuram minimizar
esse problema, como por exemplo, o arcabouo ZooKeeper, que descrito na
Seo 3.2.1.2.
Mesmo sendo uma excelente ferramenta para o processamento de dados em
larga escala, existem situaes para as quais o Hadoop no a soluo mais adequada,
devido a alguma particularidade, como as citadas a seguir:
Problemas no paralelizveis ou com grande dependncia entre os dados: esta
uma das maiores dificuldades para toda e qualquer aplicao que requer alto
desempenho. Como o princpio bsico dos programas paralelos e/ou distribudos
dividir as tarefas em subtarefas menores, para serem processadas
simultaneamente por vrios recursos computacionais, a impossibilidade ou a
dificuldade na extrao da poro paralelizvel da aplicao torna-se um grande
fator de insucesso. Assim, problemas que no podem ser divididos em
problemas menores e problemas com alta dependncia entre os seus dados no
so bons candidatos para o Hadoop. Como exemplo, podemos imaginar uma
tarefa T sendo dividida em cinco subtarefas t1, t2, t3, t4 e t5. Suponha cada tarefa
ti+1 dependente do resultado da tarefa ti. Dessa forma, a dependncia entre as
subtarefas limita ou elimina a possibilidade de sua execuo em paralelo. O
tempo total de execuo de uma aplicao nesse contexto ser equivalente (ou
maior) do que se fosse executada sequencialmente;
Processamento de arquivos pequenos: trabalho pequeno definitivamente no
tarefa para ser executada com base em um arcabouo com foco em larga escala.
Os custos adicionais (overhead) impostos pela diviso e juno das tarefas,
rotinas e estruturas gerenciais do ambiente e comunicao entre os ns de
processamento, certamente iro inviabilizar sua execuo;
Problemas com muito processamento em poucos dados: problemas com regras
de negcio complexas demais ou com um fluxo de execuo extenso em um
conjunto de dados no muito grande, tambm no sero bons candidatos a se
tornar aplicaes Hadoop. Como o foco do modelo de programao oferecer
simplicidade com as operaes Map e Reduce, pode ser uma tarefa rdua tentar
abstrair toda a complexidade do problema apenas nessas duas funes.
4
Avro: http://avro.apache.org
5
Chukwa: http://incubator.apache.org/chukwa
6
Hbase: http://hbase.apache.org
7
Hive: http://hive.apache.org
8
Pig: http://pig.apache.org
9
ZooKeeper: http://zookeeper.apache.org
Figura 3.2. Subprojetos do Apache Hadoop
(Adaptada de: Rogers, 2011)
localhost
localhost
maquina_espelho
maquina_escrava1
maquina_escrava2
maquina_escrava3
maquina_escrava4
maquina_escrava5
maquina_espelho 192.168.108.1
maquina_escrava1 192.168.108.101
maquina_escrava2 192.168.108.102
maquina_escrava3 192.168.108.103
maquina_escrava4 192.168.108.104
maquina_escrava5 192.168.108.105
3.3. HDFS
Sistema de arquivos distribudos
A manipulao dos arquivos em um computador realizada pelo sistema operacional
instalado na mquina por meio de um sistema gerenciador de arquivos. Esse sistema
possui um conjunto de funcionalidades, tais como: armazenamento, organizao,
nomeao, recuperao, compartilhamento, proteo e permisso de acesso aos
arquivos. Todo o gerenciamento deve ocorrer da forma mais transparente possvel aos
usurios, ou seja, o sistema de arquivos deve omitir toda a complexidade arquitetural da
sua estrutura no exigindo do seu usurio muito conhecimento para oper-lo.
Um sistema de arquivos distribudo possui as mesmas caractersticas que um
sistema de arquivos convencional, entretanto, deve permitir o armazenamento e o
compartilhamento desses arquivos em diversos hardwares diferentes, que normalmente
esto interconectados por meio de uma rede. O sistema de arquivos distribudo tambm
deve prover os mesmos requisitos de transparncia a seus usurios, inclusive permitindo
uma manipulao remota dos arquivos como se eles estivessem localmente em suas
mquinas. Alm disso, deve oferecer um desempenho similar ao de um sistema
tradicional e ainda prover escalabilidade.
Assim, existem algumas estruturas de controle exclusivas, ou mais complexas,
que devem ser implementadas em um sistema de arquivos distribudo. Entre essas,
podemos citar algumas imprescindveis para o seu bom funcionamento:
Segurana: no armazenamento e no trfego das informaes, garantindo que o
arquivo no seja danificado no momento de sua transferncia, no acesso s
informaes, criando mecanismos de controle de privacidade e gerenciamento
de permisses de acesso;
Tolerncia a falhas: deve possuir mecanismos que no interrompam o sistema
em casos de falhas em algum n escravo;
Integridade: o sistema dever controlar as modificaes realizadas no arquivo,
como por exemplo, alteraes de escrita e remoo, permitindo que esse seja
modificado somente se o usurio tiver permisso para tal;
Consistncia: todos os usurios devem ter a mesma viso do arquivo;
Desempenho: embora possua mais controles a serem tratados que o sistema de
arquivos convencional, o desempenho do sistema de arquivos distribudo deve
ser alto, uma vez que provavelmente dever ser acessado por uma maior gama
de usurios.
Atualmente h diversas implementaes de sistemas de arquivos distribudos,
algumas comerciais e outras de software livre, tais como: GNU Cluster File System
(GlusterFS)10 da empresa Red Hat; Moose File System (MooseFS)11, desenvolvido pela
Gemius SA; Lustre12, originrio da Carnegie Mellon University, atualmente mantido
pela Sun Microsystems; CODA13, tambm desenvolvido na Carnegie Mellon
University; General Parallel File System (GPFS)14 e OpenAFS15 da IBM, esse ltimo
derivado do Andrew File System (AFS) que tambm foi desenvolvido na Carnegie
Mellon University; e dois outros mais conhecidos pela comunidade, que faremos uma
breve descrio a seguir, Network File System (NFS) e Google File System (GFS).
O NFS um sistema de arquivos distribudo, desenvolvido pela Sun
Microsystems no incio dos anos 80. O objetivo desse sistema garantir uma utilizao
transparente do usurio aos arquivos, sem que ele possa distinguir se o acesso est
sendo feito de forma local ou remotamente, formando assim uma espcie de diretrio
virtual. O NFS possui uma estrutura cliente/servidor, onde os clientes utilizam os
arquivos por meio de acesso remoto, enquanto o servidor tem a responsabilidade de
manter esses arquivos disponveis. A comunicao entre cliente e servidor no NFS
ocorre por meio do mecanismo RPC, que por sua vez, executado sobre a pilha de
protocolos TCP/IP e UDP/IP. Embora seja um dos sistemas de arquivos distribudos
mais antigos, o NFS continua sendo muito utilizado, principalmente em sistemas
operacionais derivados do Unix.
J o GFS, desenvolvido pela Google em 2003, conforme mencionado na Seo
3.1.1, foi desenvolvido na linguagem C++ e tem como principal caracterstica o suporte
distribuio de quantidades massivas de dados. A arquitetura desse sistema segue o
padro mestre/escravo; antes de armazenar os dados, ele faz uma diviso dos arquivos
em blocos menores, que so disseminados aos ns escravos. Atualmente, aplicaes
como YouTube, Google Maps, Gmail, Blogger, entre outras, geram petabytes de dados
que so armazenados nesse sistema. Foi do GFS a inspirao para o sistema de arquivos
distribudo do Hadoop, o HDFS.
HDFS
O Hadoop Distributed File System (HDFS) um sistema de arquivos distribudo
integrado ao arcabouo Hadoop. Esse sistema teve forte inspirao no GFS da Google,
entretanto, uma das diferenas deve-se ao fato de que o HDFS um arcabouo de
cdigo aberto, e foi implementado na linguagem Java. O HDFS tambm oferece suporte
ao armazenamento e ao processamento de grandes volumes de dados em um
agrupamento de computadores heterogneos de baixo custo. Essa quantidade de dados
pode chegar ordem de petabytes, quantidade que no seria possvel armazenar em um
sistema de arquivos tradicional.
O nmero de mquinas utilizadas em um HDFS uma grandeza diretamente
proporcional probabilidade de uma dessas mquinas vir a falhar, ou seja, quanto mais
GlusterFS: http://www.gluster.org
10
11
http://www.moosefs.org
MooseFS:
LUSTRE: http://www.lustre.org
12
CODA: http://www.coda.cs.cmu.edu
13
GPFS: http://www-03.ibm.com/systems/software/gpfs
14
OpenFS: http://www.openafs.org
15
mquinas, maior a chance de acontecer algum erro em uma delas. Para contornar essa
situao, o HDFS tem como princpio promover tolerncia, deteco e recuperao
automtica de falhas. Essas funcionalidades permitem que, no caso de alguma mquina
do aglomerado vir a falhar, a aplicao como um todo no seja interrompida, pois o
processamento que estava sendo realizado nessa mquina poder ser reiniciado, ou no
pior caso, repassado para uma outra mquina disponvel. Tudo isso de forma
transparente ao usurio.
Comandos HDFS
Para iniciar os trabalhos em um aglomerado Hadoop necessrio formatar o HDFS no
intuito de prepar-lo para receber os dados de sua aplicao. Essa ao pode ser
realizada por meio do comando hadoop namenode -format, executado na mquina onde
se encontra o NameNode. Um exemplo dessa ao pode ser observado a seguir:
bin/hadoop namenode -format
Embora possa ser manipulada por diversas interfaces, uma das formas
comumente utilizada para manipular o HDFS por linha de comando. Nesta interface
possvel realizar vrias operaes, como leitura, escrita, excluso, listagem, criao de
diretrio, etc. com comandos similares ao do Linux, porm iniciados pelo prefixo
"hadoop fs". A sintaxe dos comandos segue a seguinte estrutura:
hadoop fs -comando [argumentos]
Nesse exemplo, aps o comando, como primeiro argumento, deve ser passado o
nome do arquivo que deseja copiar do HDFS, com o seu respectivo caminho. O segundo
parmetro o diretrio local onde se deseja colocar o arquivo copiado.
Como pode ser visto, a interface de linha de comando pode ser utilizada sem
muita dificuldade, principalmente para os conhecedores de Linux. Entretanto, caso essa
interface no seja adequada, o usurio pode optar por outras alternativas providas pelo
HDFS, podendo at mesmo usar a API Java para realizar essa manipulao. Perceba que
em nenhum momento falamos de comandos especficos para um sistema de arquivos
distribudos como para tratar tolerncia a falhas, balanceamento de carga e
disponibilidade, pois so todas aes tratadas pelo prprio arcabouo.
Diviso em blocos
Existem arquivos que devido ao seu grande tamanho, no podem ser armazenados em
um nico disco rgido. Esta situao fica mais evidente quando nos referimos aos
arquivos de aplicaes Big Data. Uma alternativa nesse caso criar uma forma de
dividir esses grandes arquivos e distribu-los em um aglomerado de mquinas. Embora
funcional, essa tarefa seria muito difcil de ser implementada sem a utilizao de um
recurso especfico, como o HDFS. Com esse arcabouo, toda a questo estrutural
relativa a distribuio dos arquivos feita de forma implcita, devendo apenas que o
desenvolvedor aponte corretamente os parmetros de configurao. Como exemplo ver
os Quadros 3.9 e 3.10.
O HDFS adota a estratgia de que antes de armazenar os arquivos, estes sejam
submetidos a um procedimento de diviso em uma sequncia de blocos de tamanho
fixo. O tamanho padro definido no arcabouo 64 Mb, podendo ser alterado se
necessrio. Esse tamanho muito superior ao dos sistemas de arquivos tradicionais, que
usa blocos de 512 bytes. Dessa forma, somente depois de dividido que esses arquivos
so distribudos para os diversos ns escravos. Uma outra caracterstica interessante do
HDFS que, no caso de um dado no ocupar todo o tamanho do bloco reservado a ele,
o espao restante no perdido, podendo ser utilizado por outros dados.
Arquitetura
O HDFS implementado sobre a arquitetura mestre/escravo, possuindo no lado mestre
uma instncia do NameNode e em cada escravo uma instncia do DataNode, como visto
na Figura 3.3. Em um aglomerado Hadoop podemos ter centenas ou milhares de
mquinas escravas, e dessa forma, elas precisam estar dispostas em diversos armrios
(racks). Nesse texto, a palavra armrio utilizada como um conjunto de mquinas
alocadas em um mesmo espao fsico e interligadas por um comutador (switch). Por
questes estratgicas, que sero discutidas na prxima seo, o HDFS organiza a
armazenagem dos blocos dos arquivos, e suas rplicas, em diferentes mquinas e
armrios. Assim, mesmo ocorrendo uma falha em um armrio inteiro, o dado pode ser
recuperado e a aplicao no precisaria ser interrompida.
O NameNode o componente central do HDFS, assim, recomendvel ser
implantado em um n exclusivo, e preferencialmente o n com melhor desempenho do
aglomerado. Ainda por questes de desempenho, o NameNode mantm todas suas
informaes em memria. Para desempenhar seu papel de gerenciar todos os blocos de
arquivos, o NameNode possui duas estruturas de dados importantes: o FsImage e o
EditLog. O primeiro arquivo o responsvel por armazenar informaes estruturais dos
blocos, como o mapeamento e namespaces dos diretrios e arquivos, e a localizao das
rplicas desses arquivos. O segundo, EditLog, um arquivo de log responsvel por
armazenar todas as alteraes ocorridas nos metadados dos arquivos.
Ao iniciar uma instncia do NameNode, suas tarefas iniciais so: realizar a
leitura do ltimo FsImage, e aplicar as alteraes contidas no EditLog. Terminada essa
operao, o estado do HDFS atualizado, e o arquivo de log esvaziado, para manter
apenas as novas alteraes. Esse procedimento ocorre somente quando o NameNode
iniciado, e por tal motivo, passado muito tempo de sua execuo, o EditLog tende a
ficar muito extenso, e pode afetar o desempenho do sistema, ou ainda, acarretar muitas
operaes na prxima inicializao do NameNode. Para que isto no ocorra, existe um
componente assistente ao NameNode, chamado SecondaryNameNode.
Mesmo no sendo exatamente um backup do NameNode, no caso desse vir a ser
interrompido, uma soluo tornar o SecondaryNameNode o NameNode primrio,
como uma forma de preveno de interrupo do sistema. O SecondaryNameNode tem
como principal funo realizar a juno entre o FsImage e EditLog criando pontos de
checagem, de modo a limpar o arquivo de log. Essa operao feita em intervalos de
tempo definidos na configurao do sistema. Dessa forma, como o
SecondaryNameNode no atualizado em tempo real, esse atraso poderia ocasionar a
perda de dados.
Enquanto o n mestre o responsvel por armazenar os metadados dos arquivos,
os ns escravos so os responsveis pelo armazenamento fsico dos dados. So nesses
escravos que temos os DataNodes. Em uma aplicao Hadoop, cada n escravo contm
um DataNode, que trabalha em conjunto com um TaskTracker, sendo o primeiro para
armazenamento e o segundo para processamento dos dados.
A primeira comunicao entre o mestre e o escravo ocorre quando o DataNode
registrado no NameNode, que pode ocorrer no momento da inicializao ou quando
esse for reinicializado. Todo esse procedimento de registro armazenado no arquivo
FsImage do NameNode. Aps essa interao, o DataNode precisa ainda periodicamente
se comunicar com o NameNode, enviando informaes estatsticas dos blocos que est
armazenando, bem como informaes de suas alteraes locais. So nesses momentos
de interao que se torna possvel ao NameNode definir quais ns devero armazenar
quais blocos. Se acaso o NameNode no conseguir receber informaes do DataNode,
solicitado que esse DataNode seja novamente registrado.
Replicao de dados
Alm de dividir os arquivos em blocos, o HDFS ainda replica esses blocos na tentativa
de aumentar a segurana. Por padro, um bloco do HDFS possui trs rplicas alocadas
em diferentes ns, podendo essa quantidade ser configurada. Ainda existe uma
recomendao, por questo de confiabilidade e desempenho, de alocar duas rplicas no
mesmo armrio, porm em ns distintos, e a outra rplica em um armrio diferente.
Como tipicamente a velocidade de comunicao entre mquinas de um mesmo armrio
maior que em armrios diferentes, por questo de desempenho, no momento de
selecionar uma rplica para ser substituda em um processo, o HDFS d preferncia
rplica pertencente ao mesmo armrio.
Na Figura 3.4 demonstrado o processo de replicao de blocos. Nesse exemplo
copiaremos para o HDFS dois arquivos, arquivoA e arquivoB, de tamanho e formato
distintos. Antes de envi-los aos escravos, cada um dos arquivos subdividido em N
blocos de tamanho fixo de 64 Mb, podendo o ltimo ser menor por alocar o final do
arquivo. Assim, para o arquivoA teremos os blocos a1, a2, a3, a4, ..., aN, e para o
arquivoB os blocos b1, b2, ..., bN, conforme necessidade. Alm disso, os blocos ainda
sero replicados para serem distribudos aos ns escravos. Para cada bloco foi definido
um fator de replicao de 3 (trs) unidades, ento, observamos na mesma figura que o
bloco a1 (quadrado com linha slida) foi armazenado no escravoX1 e as suas rplicas
(quadrado com linha tracejada) no escravoX2 e no escravoY3. Para uma maior garantia
de disponibilidade dos blocos, as rplicas ainda so propositalmente colocadas em
armrios diferentes, como pode ser confirmado observando as rplicas do bloco a1 no
armrioX, e no armrioY. Toda essa lgica tambm aplicada a todos os demais
blocos.
A funo Reduce, similarmente funo Map, vai receber como entrada uma
lista e, em geral, aplicar uma funo para que a entrada seja reduzida a um nico valor
na sada. Algumas funes do tipo Reduce mais comuns seriam mnimo, mximo e
mdia. Aplicando essas funes ao exemplo temos as seguintes sadas:
reduce({2,4,6,8}, mnimo) > 2
reduce({2,4,6,8}, mximo) > 8
reduce({2,4,6,8}, mdia) > 5
Google MapReduce
O paradigma de programao MapReduce demonstrou ser adequado para trabalhar com
problemas que podem ser particionados ou fragmentados em subproblemas. Isso porque
podemos aplicar separadamente as funes Map e Reduce a um conjunto de dados. Se
os dados forem suficientemente grandes, podem ainda ser particionados para a execuo
de diversas funes Map ao mesmo tempo, em paralelo. Essas caractersticas
despertaram a ateno ao paradigma, que entrou em evidncia novamente quando foi
implementado pela Google, utilizando os conceitos de programao paralela e
distribudo, conforme o histrico apresentado na Seo 3.1.1. Duas contribuies
principais do Google MapReduce se destacam:
As funes Map e Reduce deixaram de ser restritas ao paradigma de
programao funcional sendo disponibilizadas em bibliotecas Java, C++ e
Python;
O MapReduce foi introduzido na computao paralela e distribuda. Isso foi
feito, pela explcita retroalimentao dos resultados da funo Map como
entrada para funo Reduce, conforme os exemplos anteriores. A abordagem
permite que os dados distribudos ao longo dos ns de um aglomerado sejam
utilizados nas funes Map e Reduce quando necessrios.
Nessa implementao, a ideia ainda permanece a mesma: aplicar uma funo
Map em um conjunto de valores e utilizar a sada produzida para aplicar a funo
Reduce, gerando a sada final da computao. A abordagem adota o princpio de abstrair
toda a complexidade da paralelizao de uma aplicao usando apenas as funes Map
e Reduce. Embora o paradigma MapReduce fosse conhecido, a implementao da
Google deu sobrevida ao mesmo. A ideia simples das funes demonstrou ser um
mtodo eficaz de resoluo de problemas usando programao paralela, uma vez que
tanto Map quanto Reduce so funes sem estado associado e, portanto, facilmente
paralelizveis. Na Figura 3.5 apresentado o modelo MapReduce desenvolvido pela
Google para ser aplicado em aglomerados. Grande parte do sucesso dessa recriao do
MapReduce foi alavancada pelo desenvolvimento do sistema de arquivos distribudo
Google File System, ou simplesmente GFS, cujos conceitos foram aproveitados para
gerar as verses preliminares do arcabouo Apache Hadoop.
Aps o trmino das execues das tarefas de Map o arcabouo executa uma fase
intermediria denominada Shuffle. Essa fase agrupa os dados intermedirios pela chave
e produz um conjunto de tuplas (k2, list(v2)). Assim todos os valores associados a uma
determinada chave sero agrupados em uma lista. Aps essa fase intermediria, o
arcabouo tambm se encarrega de dividir e replicar os conjuntos de tuplas para as
tarefas Reduce que sero executadas. A fase de Shuffle a que mais realiza troca de
dados (E/S), pois os dados de diversos ns so transferidos entre si para a realizao das
tarefas de Reduce.
Na fase de reduo, cada tarefa consome o conjunto de tuplas (k2, lista(v2))
atribudo a ele. Para cada tupla, uma funo definida pelo usurio chamada e
transformando-a em uma sada formada por uma lista de pares chave/valor (k3, v3).
Novamente, o arcabouo se encarrega de distribuir as tarefas e fragmentos pelos ns do
aglomerado. Esse conjunto de aes tambm pode ser expresso da seguinte forma:
reduce(k2,list(v2)) list(k3,v3) (II)
16
http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapreduce/Mapper.html
Quadro 3.17 podemos ver como a classe TokenizerMapper estende a classe Mapper
(Mapper<Object, Text, Text, IntWritable>). Podemos deduzir que a classe
considera como chave de entrada objetos (arquivos) que possuem como valores texto
(palavras). Como sada produzir chaves do tipo texto (palavras) que possuem como
valores inteiros (quantidade).
Quadro 3.17. Classe TokenizerMapper
1. public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{
2. private final static IntWritable one = new IntWritable(1);
3. private Text word = new Text();
4. public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
5. StringTokenizer itr = new StringTokenizer(value.toString());
6. while (itr.hasMoreTokens()) {
7. word.set(itr.nextToken());
8. context.write(word, one);
9. }
10. }
11. }
17
http://hadoop.apache.org/common/docs/current/api/org/apache/hadoop/mapreduce/Reducer.html
TokenizerMapper e IntSumReducer que estendem respectivamente as classes abstratas
Mapper e Reducer.
Quadro 3.18. Classe IntSumReducer
1. public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
2. private IntWritable result = new IntWritable();
3. public void reduce(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException {
4. int sum = 0;
5. for (IntWritable val : values) {
6. sum += val.get();
7. }
8. result.set(sum);
9. context.write(key, result);
10. }
11. }
entrada1.txt
(CSBC, 1)
(JAI, 1)
CSBS JAI 2012
(2012, 1)
CSBC 2012 em (CSBC, 1)
Curitiba (2012, 1)
(em, 1)
(2012, [2, 2]) (2012, 4) 2012, 4
(Curitiba, 1)
(CSBC, [2, 1]) (CSBC, 3) CSBC, 3
(Curitiba, [1, 1]) (Curitiba, 2) Curitiba, 2
entrada2.txt (em, 1) (em, 1) em, 1
(Hadoop, 1) (JAI, 2) JAI, 2
Minicurso (Minicurso, 1) (JAI, [1, 1]) (Hadoop, 1) Hadoop, 1
Hadoop JAI (Hadoop, 1) (Minicurso, 1) (Minicurso, 1) Minicurso, 1
2012 (JAI, 1) (Paran, 1) (Paran, 1) Paran, 1
CSBC 2012 (2012, 1)
Curitiba (CSBC, 1)
Paran (2012, 1)
(Curitiba, 1)
(Paran, 1)
map
bloco0
map
Ainda que possua modos para execuo em uma nica mquina, as ilustraes
apresentadas nas Figuras 3.6 e 3.7 ressaltam que o arcabouo Hadoop foi desenvolvido
para executar em aglomerados e grades computacionais de forma a aproveitar o melhor
da computao distribuda e paralela, usando seu sistema de arquivos distribudo.
Outros exemplos
Para ilustrar o funcionamento do Apache Hadoop, Tom White (White, 2010) apresenta
em seu livro, um exemplo de minerao de dados usando Hadoop. O conjunto de dados
usado no exemplo foi coletado por sensores climticos espalhados pelo planeta e podem
ser areos, terrestres ou martimos. Alguns dados so provenientes de satlites. Os
sensores coletam e renem diversas informaes que compem o clima local, sua
localizao (latitude e longitude), altitude, direo do vento e temperatura local. O
conjunto de dados utilizado disponibilizado pelo National Climate Data Center
(NCDC) em seu stio da Internet. Basicamente existem dados climticos sobre todos os
dias do ano durante um sculo, de 1901 a 2001. O exemplo pretende encontrar a maior
temperatura global para cada ano disponibilizado.
Cada leitura rene as informaes coletadas pelos sensores, e processada de
forma a ser armazenada em apenas uma cadeia de caracteres. O conjunto das leituras
realizadas durante um ano, proveniente dos diversos sensores, agrupado em um
arquivo texto. Dentro dos arquivos, cada linha representa uma leitura de um sensor. A
aplicao MapReduce desse exemplo vai retirar, de cada uma das entradas dos sensores,
o ano em que a leitura foi realizada e a temperatura do ar, ambos em destaque na Figura
3.8. A reproduo do processo tambm pode ser vista na mesma figura. Considere a
execuo da aplicao para os dados dos anos de 1901 e 1902.
Outro exemplo prtico o uso do Hadoop para a gerao de recomendaes.
Sistemas de recomendao criam sugestes personalizadas e tem se difundido
amplamente no comrcio eletrnico. As sugestes de produtos similares que um usurio
recebe quando navegando por um stio de compras na Internet utilizam esse tipo de
tecnologia. H mais de uma dcada os sistemas de recomendao fazem parte de
grandes stios de comrcio eletrnico, como a Amazon, CDNow e MovieFinder.
Figura 3.8. Minerao dos dados climticos do NCDC usando Hadoop MapReduce
Escalonamento de tarefas
Em suas verses iniciais, o Hadoop tinha uma abordagem de escalonamento simples,
usando uma estrutura tipo fila, onde os trabalhos submetidos aguardavam e eram
executados de acordo com a ordem de chegada. Dessa forma, cada trabalho bloqueava o
aglomerado todo durante sua execuo, mesmo que no utilizasse todos os recursos ou
ns disponveis. Mais tarde, como uma evoluo, foi estabelecido o mecanismo de
prioridades, onde os trabalhos com maiores prioridades so movidos para o incio da fila
de execuo. Entretanto, esse mecanismo no tinha suporte preempo, e trabalhos
com alta prioridade ainda poderiam ficar bloqueados na fila esperando um trabalho
longo com baixa prioridade terminar sua execuo. O escalonador padro do Hadoop
ainda o de fila simples com prioridade. Entretanto, isso pode ser alterado, pois a
distribuio contm pelo menos outros trs mecanismos disponveis: o escalonador
justo (Fair Scheduler), escalonador de capacidade (Capacity Scheduler) e o escalonador
de demanda (HOD Scheduler Hadoop on Demand Scheduler).
O escalonador justo um mtodo de atribuio de recursos para os trabalhos
submetidos ao aglomerado de forma que todos os trabalhos obtenham, em mdia, uma
parcela igual dos recursos ao longo do tempo. Se h apenas um trabalho em execuo
no aglomerado, todos os recursos disponveis podem ser alocados para o mesmo.
Quando outros trabalhos so submetidos, os recursos livres so designados para as
tarefas dos novos trabalhos. Dessa forma cada trabalho submetido ao aglomerado ficar,
em mdia, como o mesmo tempo de CPU. Essa abordagem permite que trabalhos
menores terminem em tempos razoveis e evita que trabalhos longos sofram starvation.
O escalonador justo ainda pode trabalhar com prioridades para os trabalhos. As
prioridades so usadas como pesos para determinar quanto tempo de processamento
cada trabalho vai receber.
O escalonador de capacidade foi desenvolvido para executar o Hadoop
MapReduce de forma compartilhada, em um aglomerado onde vrias empresas
diferentes possuem acesso. Foi projetado para maximizar a capacidade e a utilizao do
aglomerado na execuo de trabalhos MapReduce. Esse escalonador permite que cada
empresa com acesso ao aglomerado tenha uma garantia mnima de capacidade de
execuo, em outras palavras, tempo de processamento. A ideia central que os
recursos disponveis no aglomerado sejam divididos entre vrias organizaes que
financiam coletivamente a manuteno da infraestrutura com base em suas necessidades
de processamento. Existe ainda o benefcio adicional de que uma organizao pode
acessar qualquer excedente de capacidade que no est sendo usado por outros. Isso
proporciona elasticidade com elevado custo-benefcio. Em se tratando de recursos
compartilhados, o escalonador fornece um conjunto rigoroso de limites para assegurar
que um nico trabalho ou usurio ou fila no consuma uma quantidade desproporcional
de recursos no aglomerado. Alm disso, o JobTracker um recurso primordial no
arcabouo e o escalonador fornece limites para tarefas e trabalhos inicializadas e/ou
pendentes de um nico usurio na fila de espera, tudo para garantir a igualdade de uso e
a estabilidade do aglomerado.
O escalonador de demanda ou HOD um sistema para provisionamento e
gerenciamento de instncias independentes de Hadoop MapReduce e Hadoop
Distributed File System (HDFS) em um aglomerado compartilhado. HOD uma
ferramenta que permite tanto administradores quanto usurios configurar e usar de
forma rpida o Hadoop. Tambm uma ferramenta til para desenvolvedores que
precisam compartilhar um aglomerado fsico para testar as suas prprias verses do
Hadoop. O HOD usa um gerenciador de recursos para fazer a alocao de ns e neles
inicializa o HDFS e executa as aplicaes MapReduce quando solicitado.
Monitoramento de progresso
A execuo de um trabalho MapReduce pode ser considerada como a execuo em lote
de um conjunto de tarefas. importante, ao longo da execuo de um trabalho, saber do
andamento e progresso das tarefas intermedirias. No Hadoop, cada trabalho e suas
tarefas possuem um estado, que inclui entre outras coisas, sua condio (executando,
terminado com sucesso, falhou), o progresso dos maps e reduces e os contadores do
trabalho. Uma tarefa em execuo deve manter registros de progresso de forma a relatar
o percentual que j foi concludo. Quando uma tarefa reporta progresso, um sinal
ajustado. Essa mudana de estado faz com que informaes sejam enviadas ao
gerenciador de tarefas TaskTracker. A atualizao enviada ento ao gerenciador de
trabalhos JobTracker. Nos sinais enviados ao gerenciador de trabalhos esto includos
os estados de todas as tarefas em execuo. O gerenciador de trabalhos combina todas
as atualizaes de progresso das tarefas e gera uma viso global de progresso dos
trabalhos em execuo no aglomerado, que pode ser analisada posteriormente para uma
possvel melhoria de desempenho do arcabouo.
2
programa 1 JobClient Gerenciador
MapReduce 4 de Trabalhos 5
(JobTracker)
JVM Cliente 3
N Cliente 6 N JobTracker
1: executa trabalho
2: solicita ID HDFS 7
3: copia recursos do
trabalho
4: submete trabalho
5: inicializa trabalho 8
6: recupera blocos de
dados de entrada
7: sinal de vida e
retorno de tarefas Tarefas 10 Instncia 9 Gerenciador
8: recupera recursos Map ou de Tarefas
do trabalho Reduce (TaskTracker)
9: inicia JVM Filha
10: executa N TaskTracker
N1 S S N1
W W
N2 I I N2
T T
d(2) N3 C C N3
H H
N30 N30
Armrio 1 Armrio 2
Fases intermedirias
A execuo de uma aplicao MapReduce no Hadoop citada, na maioria dos casos,
com um conjunto de execues de tarefas Map e Reduce, com os resultados das tarefas
Map sendo alimentados como entrada nas tarefas Reduce. O Hadoop garante que todas
as entradas de cada tarefa Reduce esto ordenadas por chave. Logo, nessa simplificao
de processo, duas fases importantes so omitidas: a fase de Shuffle (embaralhamento) e
a fase de Sort (ordenao).
A fase de Shuffle pode ser considerada como o ponto crucial na execuo de
uma aplicao MapReduce. Do lado das tarefas Map, quando uma tarefa Map comea a
produzir resultados, os dados so primeiramente escritos em um buffer circular em
memria. Isso ocorre por alguns motivos. Primeiramente porque os resultados de uma
tarefa Map podem ser divididos para uso em mais de uma tarefa Reduce. Em segundo
porque o custo de ordenao destes dados enquanto ainda esto em memria bem
menor do que se j estivessem no disco rgido. E finalmente porque o Hadoop consegue
economizar tempo de E/S escrevendo uma quantidade maior de dados em uma nica
operao. Alguns parmetros de configurao podem ser configurados para obteno de
melhor desempenho por parte do arcabouo como, por exemplo, o tamanho do buffer na
memria (io.sort.mb) e o percentual de preenchimento do buffer
(io.sort.spill.percent) que vai disparar a operao de escrita no disco.
Antes de escrever seus resultados no disco rgido, as tarefas de Map dividem
seus dados de sada em parties de acordo com as tarefas de Reduce para as quais os
dados sero enviados, conforme a Figura 3.13. Ainda na memria, os dados so
ordenados de acordo com a chave, para depois serem escritos no disco. Toda vez que o
percentual limite do buffer atingido, uma operao de escrita no disco iniciada. Se
nesse intervalo o buffer ficar cheio a tarefa suspensa at que todo o contedo seja
escrito no disco. Os dados so ento disponibilizado para as tarefas Reduce. Para reduzir
a quantidade de trfego de dados entre os ns durante a fase de Shuffle, as sadas das
tarefas Map podem ser comprimidas usando ferramentas disponveis no sistema
operacional como gzip e bzip2.
buffer em juno
map reduce
memria
juno
juno no
disco juno
bloco de sada
entrada
parties dados em disco e memria
outras outras
tarefas tarefas
map reduce
Referncias
Abad, C., Lu, Y., & Campbell, R. (sept. de 2011). DARE: Adaptive Data Replication
for Efficient Cluster Scheduling. Cluster Computing (CLUSTER), 2011 IEEE
International Conference on, (pp. 159-168).
Across, P., & Hardware, H. (2008). HDFS Architecture. Access, 1-14.
Apache Hadoop. (s.d.). Acesso em 12 de 02 de 2012, disponvel em
http://hadoop.apache.org
Apache Mahout. (s.d.). Acesso em 24 de 04 de 2012, disponvel em
http://mahout.apache.org
Big Data University. (s.d.). Acesso em 20 de 02 de 2012, disponvel em
http://www.db2university.com
Dean, J., & Ghemawat, S. (2004). MapReduce: Simplified Data Processing on Large
Clusters. OSDI, 13.
Ding, M., Zheng, L., Lu, Y., Li, L., Guo, S., & Guo, M. (2011). More convenient more
overhead: the performance evaluation of Hadoop streaming. Proceedings of the
2011 ACM Symposium on Research in Applied Computation (pp. 307-313). New
York, NY, USA: ACM.
Fan, B., Tantisiriroj, W., Xiao, L., & Gibson, G. (2009). DiskReduce: RAID for data-
intensive scalable computing. Proceedings of the 4th Annual Workshop on
Petascale Data Storage (pp. 6-10). New York, NY, USA: ACM.
Fesehaye, D., Malik, R., & Nahrstedt, K. (2009). EDFS: a semi-centralized efficient
distributed file system. Proceedings of the 10th ACM/IFIP/USENIX
International Conference on Middleware (pp. 28:1--28:2). New York, NY,
USA: Springer-Verlag New York, Inc.
Ghemawat, S., Gobioff, H., & Leung, S.-T. (2003). The Google file system. (C. Roisin,
E. V. Munson, & C. Vanoirbeek, Eds.) ACM SIGOPS Operating Systems
Review, 37(5), 29.
Guang-Hua, S., Jun-Na, C., Bo-Wei, Y., & Yao, Z. (june de 2011). QDFS: A quality-
aware distributed file storage service based on HDFS. Computer Science and
Automation Engineering (CSAE), 2011 IEEE International Conference on, 2,
pp. 203-207.
Ibm. (2011). Bringing big data to the Enterprise. IBMcom.
Jiang, D., Ooi, B. C., Shi, L., & Wu, S. (#sep# de 2010). The performance of
MapReduce: an in-depth study. Proc. VLDB Endow., 3(1-2), 472-483.
Jin, J., Luo, J., Song, A., Dong, F., & Xiong, R. (may de 2011). BAR: An Efficient Data
Locality Driven Task Scheduling Algorithm for Cloud Computing. Cluster,
Cloud and Grid Computing (CCGrid), 2011 11th IEEE/ACM International
Symposium on, (pp. 295-304).
Joshi, S. B. (2012). Apache hadoop performance-tuning methodologies and best
practices. Proceedings of the third joint WOSP/SIPEW international conference
on Performance Engineering (pp. 241-242). New York, NY, USA: ACM.
Kaushik, R. T., Bhandarkar, M., & Nahrstedt, K. (2010). Evaluation and Analysis of
GreenHDFS: A Self-Adaptive, Energy-Conserving Variant of the Hadoop
Distributed File System. Proceedings of the 2010 IEEE Second International
Conference on Cloud Computing Technology and Science (pp. 274-287).
Washington, DC, USA: IEEE Computer Society.
Kim, S., Won, J., Han, H., Eom, H., & Yeom, H. Y. (#dec# de 2011). Improving
Hadoop performance in intercloud environments. SIGMETRICS Perform. Eval.
Rev., 39(3), 107-109.
Krishnan, S., & Counio, J. C. (2010). Pepper: An Elastic Web Server Farm for Cloud
Based on Hadoop. Proceedings of the 2010 IEEE Second International
Conference on Cloud Computing Technology and Science (pp. 741-747).
Washington, DC, USA: IEEE Computer Society.
Lam, C. (12 de 2010). Hadoop in Action. Manning Publications.
Lee, K.-H., Lee, Y.-J., Choi, H., Chung, Y. D., & Moon, B. (#jan# de 2012). Parallel
data processing with MapReduce: a survey. SIGMOD Rec., 40(4), 11-20.
Lee, K.-R., Fu, M.-H., & Kuo, Y.-H. (june de 2011). A hierarchical scheduling strategy
for the composition services architecture based on cloud computing. Next
Generation Information Technology (ICNIT), 2011 The 2nd International
Conference on, (pp. 163-169).
Leo, S., & Zanetti, G. (2010). Pydoop: a Python MapReduce and HDFS API for
Hadoop. Proceedings of the 19th ACM International Symposium on High
Performance Distributed Computing (pp. 819-825). New York, NY, USA:
ACM.
Lin, J., & Dyer, C. (2010). Data-Intensive Text Processing with MapReduce. Morgan &
Claypool Publishers.
Malley, O. O. (2008). TeraByte Sort on Apache Hadoop. Whitepaper(May), 1-3.
Mikami, S., Ohta, K., & Tatebe, O. (2011). Using the Gfarm File System as a POSIX
Compatible Storage Platform for Hadoop MapReduce Applications.
Proceedings of the 2011 IEEE/ACM 12th International Conference on Grid
Computing (pp. 181-189). Washington, DC, USA: IEEE Computer Society.
National Climate Data Center. (s.d.). Acesso em 15 de 05 de 2012, disponvel em
http://www.ncdc.noaa.gov/oa/ncdc.html
Pan, L., Chen, L., Hui, J., & Wu, J. (july de 2011). QoS-Based Distributed Service
Selection in Large-Scale Web Services. Services Computing (SCC), 2011 IEEE
International Conference on, (pp. 725-726).
Rogers, Shaw. (2011). Big data is Scaling BI and Analytics. Brookfield.
Thusoo, A., Sarma, J. S., Jain, N., Shao, Z., Chakka, P., Zhang, N., et al. (2010). Hive
A Petabyte Scale Data Warehouse Using Hadoop. (F. Li, M. M. Moro, S.
Ghandeharizadeh, J. R. Haritsa, G. Weikum, M. J. Carey, et al., Eds.)
Architecture, 996-1005.
Venner, J. (2009). Pro Hadoop. Berkely, CA, USA: Apress.
White, T. (2010). Hadoop: The Definitive Guide. O'Reilly Media.
Wlodarczyk, T. W., Han, Y., & Rong, C. (2011). Performance Analysis of Hadoop for
Query Processing. Proceedings of the 2011 IEEE Workshops of International
Conference on Advanced Information Networking and Applications (pp. 507-
513). Washington, DC, USA: IEEE Computer Society.
Yahoo! Developer Network. (s.d.). Acesso em 23 de 02 de 2012, disponvel em
http://developer.yahoo.com/blogs/hadoop/
Zhang, X., Feng, Y., Feng, S., Fan, J., & Ming, Z. (dec. de 2011). An effective data
locality aware task scheduling method for MapReduce framework in
heterogeneous environments. Cloud and Service Computing (CSC), 2011
International Conference on, (pp. 235-242).
Zhu, X., & Wang, B. (june de 2011). Web service management based on Hadoop.
Service Systems and Service Management (ICSSSM), 2011 8th International
Conference on, (pp. 1-6).