You are on page 1of 10

Complementos Base

de Dados
TRABALHO PRTICO HADOOP

David Ferreira-72603 Gil Mesquita-72700 Jorge Loureiro-72982

Introduo
O trabalho proposto o desenvolvimento de uma aplicao, que seja capaz
de processar um determinado tipo de dados definido pelo grupo, que
atravs do Hadoop, produzir um resultado processado. Ser necessrio o
desenvolvimento de funes Map e Reduce, bem como otimizaes,
nomeadamente o desenvolvimento de uma funo Combiner e a utilizao
de uma forma de encadeamento de jobs (job chaining).
Por opo do grupo, a aplicao a desenvolver ir correr sobre uma
instalao hadoop configurada em n pseudo-distribuido.

PGINA 1

Descrio do problema
O problema desenvolvido pelo grupo aborda o nmero de vezes que uma
pessoa vai ao ginsio durante a semana. Foram criados sete ficheiros,
correspondentes ao histrico de presenas num ginsio em cada dia da
semana. Com esta informao teve-se como objetivo:
1. Calcular o nmero de vezes que cada pessoa foi ao ginsio durante a
semana.
2. Apresentar a pessoa que mais vezes foi ao ginsio durante essa
mesma semana.

Soluo

1 Job:

Para o primeiro objetivo, passou-se criao de um job, foi necessria a


implementao de uma funo map() que vai ler o texto respetivo de cada
file, linha-a-linha, tokenizando cada uma para posterior envio para a funo
de reduce(). Ao chegar ao reduce os tokens vo ter o formato na forma
<Text, one>, sendo que one uma varivel esttica inicializada com o
valor 1 e Text ser o token processado pela funo de mapping. A funo
reduce vai por sua vez, processar pares, contando o nmero de vezes que
cada nome vai ocorrer, indicando posteriormente o resultado no objeto
context.

Figura 1- Funo Map

PGINA 2

A imagem anterior apresenta o cdigo referente funo map, esta funo


recebe como parmetros de entrada uma Key do tipo Object e um value do
tipo Text. Atravs do StringTokenizer o map vai ler linha a linha e vai
interpretar o seu contedo, apenas acabando quando j no encontrar
mais nenhum token. Quando termina escreve o par no objeto contexto que
ir ser enviado como input para a funo de reduce.

Figura 2- Funo Reduce


A imagem a cima apresenta a funo de reduce, vai receber uma key do
tipo Text e um value do tipo LongWritable, sendo ambos os argumentos do
mesmo tipo que os argumentos do output da funo map(). Inicialmente foi
criada um varivel do tipo LongWritable que servir para indicar o
resultado da contagem do nmero de vezes que cada nome aparece, ao
objeto context. Para realizar a contagem utilizou-se um ciclo for each, que
vai incrementando ao valor j existente uma unidade, por cada vez que o
nome repetido.

2 Job:
Este segundo job destina-se a realizar o segundo objetivo proposto e
contm tal como o primeiro job uma funo de map e uma de reduce.

PGINA 3

A funo de map mapeia os tokens para a funo de reduce, neste caso faz
o split por cada mudana de linha para um array (lines), iterando de
seguida sobre esse mesmo array e fazendo um novo split, desta vez por
cada tab presente, resultando num novo array (array) de dois elementos
que vo assumindo sucessivamente os valores do split por tab. A criao
deste split por tab foi necessria uma vez que o que recebido no mapper
atravs do output do reducer do primeiro job um par na forma <Text,
value> mas que no entanto no passa de um Text! Uma vez que no
segundo reducer queremos trabalhar com estes dados na forma <Text,
value> como sendo um par de valores, foi necessrio ento a
implementao deste split. Por cada iterao os dois elementos resultantes
do ltimo split so escritos para a varivel context que depois enviada
como input para a nossa prxima funo de reduce.

Figura 3- Funo Map do segundo job

A funo de reduce recebe sucessivamente duas variveis j separadas


pelo map (como referido a cima), uma com o nome do sujeito e outra com
o nmero de vezes que ele foi ao ginsio.
Por cada par de variveis recebidas, verifica se o nmero de presenas o
maior at ao momento e cada vez que recebe um novo mximo
salvaguarda tanto o nome do sujeito como o respetivo nmero de
presenas.
O ciclo termina quando entra na instruo decisria if que identifica
quando que no h mais nada a ser tratado no reducer, neste momento
que as variveis nome e npresenas correspondentes ao mximo de
presenas encontrado so escritas para a varivel context, terminando
assim a execuo do job.

PGINA 4

Figura 4- Funo Reduce do segundo job

Encadeamento
Tal como foi dito anteriormente, para concretizar o segundo objetivo
passou-se criao de um outro job, dividindo-se o problema em subtarefas, cada uma delas realizada por um job individual. Desta forma,
tornou-se possvel encadear os jobs. Este processo pode ser realizado de
diferentes formas. A forma utilizada consistiu na criao de dois jobs no
mesmo programa, fazendo com que o output do primeiro job fosse o input
do segundo, permitindo assim que se obtivesse a informao do primeiro
job, sobre a qual o segundo utilizou para verificar qual a pessoa que mais
vezes foi ao ginsio nessa semana, bem como o nmero de vezes que essa
pessoa esteve no ginsio durante a semana. Utilizou-se o objeto JobControl,
para permitir a interligao dos jobs programaticamente. O Objecto
JobControl aceita instncias de ControlledJob, o qual define um job mais as
suas dependncias, automaticamente interligando os outputs com os
inputs necessrios.

PGINA 5

Figura 5- Primeiro job

Figura 6- Segundo job

PGINA 6

Figura 7-JobControl

PGINA 7

Otimizao com Combiner


Como forma de otimizao do programa, implementou-se um combiner que
ir combinar a informao que ser posteriormente enviada ao reducer do
primeiro job, isto , no ir enviar o par chave-valor por cada vez que
verificar um nome, mas sim s depois de verificar todos os nomes que
existem e nmero de vezes que cada um ocorre por cada ficheiro. Assim
aumentado o desempenho da aplicao. A realizao desta fase ocorre
entre a fase de Map e a de Reduce, e explicitamente declarada no objeto
job da mesma forma que as classes Mapper e Reducer. Como se pode
verificar na imagem seguinte, o combiner bastante semelhante funo
reduce, verificando-se ainda que o job1 que contem a funo combiner,
demora menos a processar os dados que o job1 sem a funo combiner. A
diferena temporal no muito acentuada pois est a ser processada
pouca quantidade de informao, servindo este exemplo apenas para fins
ilustrativos.

Figura 8- job1 sem combiner | job1 com combiner

Figura 9- Funo combiner aplicada ao Job1

PGINA 8

PGINA 9

You might also like