Encontrando Sub-conjuntos de itens frequentes
mediante MapReduce no Hadoop
Juan Gabriel Colonna
12/15/13

1

Introdu¸˜o
ca...
2

Testes r´pidos
a

O objetivo desta se¸˜o ´ explicar como executar rapidamente alguns testes com
ca e
as fun¸˜es Map e R...
de dados e cada coluna a uma vari´vel. Na teoria de aprendizagem de m´quina
a
a
´ comum referirmos ao conjunto vari´veis q...
• <Y 5,1> o key ´ a vari´vel Y, que representa a coordenada, possui o valor
e
a
5 e o value igual a 1;
• <month mar,1> a v...
33

i n s t a n c e . append ( var names [ i ] + ’ ’ + s t r ( i n t ( round ( f l o a t (
words [ i ] ) ) ) ) ) # arredon...
1. [[], [X 7]] primeira itera¸˜o do loop f or;
ca
2. [[], [X 7], [Y 5], [X 7, Y 5]] segunda itera¸˜o do loop f or;
ca
3. [...
Como comentei anteriormente a fun¸˜o Reduce aproveita o fato que o Haca
doop ordena alfabeticamente os keys retornados pel...
Neste trabalho o Hadoop executou de forma local mas pode ser simulada uma
distribui¸˜o de tarefas em diferentes cluster co...
6

Interpretando os resultados

O resultado da execu¸˜o anterior mostrando os subconjuntos de tamanho m´ximo
ca
a
4 e freq...
Referˆncias
e
[1] C. Chu, Sang Kyun Kim, Yi-An Lin, YuanYuan Yu, Gary Bradski, Andrew Y Ng, and Kunle Olukotun. Map-reduce...
Upcoming SlideShare
Loading in...5
×

Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes mediante MapReduce no Hadoop

369

Published on

Published in: Education
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
369
On Slideshare
0
From Embeds
0
Number of Embeds
14
Actions
Shares
0
Downloads
11
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Uma abordagem BigData para Encontrar Sub-conjuntos de itens frequentes mediante MapReduce no Hadoop

  1. 1. Encontrando Sub-conjuntos de itens frequentes mediante MapReduce no Hadoop Juan Gabriel Colonna 12/15/13 1 Introdu¸˜o ca Este trabalho consiste na implementa¸˜o de uma t´cnica de minera¸˜o para ca e ca encontrar subconjuntos de itens frequentes em grandes conjuntos de dados utilizando o modelo Map-Reduce. Este modelo foi desenvolvido para processar grandes conjuntos de dados em paralelos sobre arquiteturas de clusters [3]. A Arquitetura Map-Reduce baseia-se no uso de computadores simples, tais como n´s conectados em rede mediante ethernet, possibilitando o intercambio de ino forma¸˜o entre eles. Para o processamento utiliza duas fun¸˜es principais, a ca co fun¸˜o Map que transforma os dados de entrada em uma palavra chave e um ca valor da forma < key, value > e a fun¸˜o Reduce que utilizando o value para ca somar as ocorrˆncias das palavras chaves (ou keys). e A forma de modelar um problema mediante Map-Reduce pode ser aplicado a v´rios m´todos de aprendizagem de m´quina tais como os explicados por Chu et a e a al. [1]. Mas nossa abordagem foi baseado no trabalho pr´vio de Cortez et al.[5] e com duas diferen¸as. A primeira diferen¸a ´ o conjunto de dados utilizados, c c e que no meu caso utilizei a cole¸˜o F orestF ires1 . Escolhi este dataset por que ca inclui dados de um problema ambiental amplamente abordado nas aplica¸˜es de co monitoramento que utilizam Redes de Sensores. A segunda diferen¸a ´ a forma c e em que s˜o gerados os keys da fun¸˜o Map. Diferente de Cortez et al.[5] eu a ca utilizei subconjuntos frequentes especificando o tamanho m´ximo poss´ e n˜o a ıvel a pares frequentes. Finalmente o problema estudado neste trabalho foi definido como: dado um conjunto de dados (ou dataset), separado por instancias (linhas), determinar os subconjuntos de itens que aparecem com mas frequˆncias em todas as instancias. e As fun¸˜es Map e Reduce foram implementadas na linguagem python e os co teste foram executados em uma plataforma Hadoop instalada localmente 2 . A ferramenta Hadoop provˆ a plataforma Map-Reduce permitindo ao usu´rio criar e a as fun¸˜es pr´prias Map e Reduce [4]. O Hadoop utiliza um sistema de arquivo co o distribu´ e implementa, de forma transparente para o usu´rio, a fun¸˜o que ıdo a ca ordena os keys. No arquivo instalando haddop no ubuntu.txt inclui uma guia de instala¸˜o e configura¸˜o do Hadoop no Ubuntu linux 12.04. ca ca 1 http://archive.ics.uci.edu/ml/datasets/Forest+Fires 2 http://hadoop.apache.org/ 1
  2. 2. 2 Testes r´pidos a O objetivo desta se¸˜o ´ explicar como executar rapidamente alguns testes com ca e as fun¸˜es Map e Reduce, sem muito detalhe do funcionamento, para poder ter co uma visualiza¸˜o sobre a entrada e a sa´ ca ıda. Nas pr´ximas se¸˜es continuarei o co com a explica¸˜o detalhada. ca Este relat´rio ´ acompanhado de quatro scripts: mapper.py, reducer.py, reo e e a ducer teste.py e menu.sh. Para poder executar todos eles ´ necess´rio primeiro dar permiss˜o de execu¸˜o a cada um, que pode ser feito num terminal exea ca cutando dentro da pasta dos arquivos sudo chmod a+x mapper.py ree ducer teste.py reducer.py menu.sh. Para executar tais testes ´ utilizada uma base menor, com trˆs linhas, e uma sabe completa, sendo os arquivos foe rest fires input teste.txt e forestfires.cvs respetivamente. Como a linguagem utilizada foi python n˜o inclu´ um makefile, mas criei a ı um script que permite executar os testes. Este scrit ´ o arquivo menu.sh. O e primeiro passo ´ executar em um terminal ./menu.sh. Ser˜o apresentadas trˆs e a e op¸˜es: co ıda 1. Testar a fun¸˜o Map com forest fires input teste.txt que gera a sa´ ca teste map out.txt; 2. Testar a fun¸˜o Map e Reduce com forest fires input teste.txt que gera ca teste MapReduce out.txt; e 3. Testar a fun¸˜o Map/Reduce com a base completa (forestfires.csv) que ca gera teste completo out.txt. A op¸˜o 1 mostra o resultado de executar somente a fun¸˜o Map gerando ca ca assim os respetivos pares <key,values>. A op¸˜o 2 aplica a fun¸˜o Map, orca ca dena a sa´ alfabeticamente e executa a fun¸˜o Reduce para fazer a contagem. ıda ca Com a configura¸˜o por defeito ser˜o mostrados apenas as os subconjuntos com ca a frequˆncias maiores ou iguais a 2. A ultima op¸˜o, executa o teste Map-Reduce e ca usando a base completa mostrando na sa´ os subconjuntos com frequˆncias ıda e maiores ou iguais a 200. Assim esta sa´ gera o arquivo teste completo out.txt ıda com: rain 0 512 area 0 257 rain 0 area 0 254 Y 4 203 Y 4 rain 0 201 Este resultado deve ser interpretado como “nome da vari´vel, valor da vari´vel a a e frequˆncia”. Exemplo: a ultima regra ´ “subconjunto com as vari´veis Y e e ´ e a rain com valores 4 e 0 respetivamente ocorreu 201 vezes”. Finalizando com os teste r´pidos continuamos com a descri¸˜o detalhada do a ca dataset, das fun¸˜es e dos testes usando o Hadoop. co 3 Descri¸˜o do dataset ca O dataset escolhido ´ um arquivo csv, isto significa que as vari´veis encontrame a se separadas por virgulas, correspondendo cada linha da base a uma instancia 2
  3. 3. de dados e cada coluna a uma vari´vel. Na teoria de aprendizagem de m´quina a a ´ comum referirmos ao conjunto vari´veis que comp˜e uma instancia como ”cae a o racter´ ısticas”. A base Forest Fires possui 12 caracter´ ısticas e por tratar-se uma base desenvolvida para modelar um problema de regress˜o a ultima coluna, a a n´mero 13, ´ um valor real que representa a ´rea total queimada do parque em u e a hectares. Assim o conjuntos de dados foi originalmente usado para entender a rela¸˜o entre quantidade de ´rea queimada no parque Montesinho e os dados ca a meteorol´gicos desse momento [2]. O conjunto de caracter´ o ısticas utilizadas s˜o: a 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 4 X = coordenada do parque entre 1 e 9 no exio x; Y = coordenada do parque entre 2 e 9 no eixo y; month = mes do ano desde janeiro at´ dezembro (”jan- ”dec”); e day = dia da semana (”mon- ”sun”); FFMC - valor num´rico da umidade contida nos produtos vegetais de e superf´ ıcie e outros combust´ ıveis secos. Mostra a relativa facilidade de igni¸˜o e a combustibilidade (18.7 - 96.20); ca DMC - valor num´rico da umidade m´dia contida em camadas orgˆnicas e e a compactas de profundidade moderada. Indica a profundidade a que o fogo se produzir´ em materiais vegetais (1.1 - 291.3); a DC - valor num´rico da umidade contida em materiais compactos e de e ´ grande volume. E um indicador util de seca e mostra a probabilidade de ´ o fogo atingir enorme profundidade nos materiais (7.9 - 860.6); ISI - valor da evolu¸˜o inicial do fogo, este indica a velocidade de evolu¸˜o ca ca do fogo de lento a r´pido (0.0 - 56.10); a temp - temperatura em graus Celsius (2.2 - 33.30); RH - porcentagem de umidade relativa %: 15.0 to 100 wind - velocidade do vento em km/h: 0.40 to 9.40 rain - chuva em mm/m2 : 0.0 to 6.4 area - ´rea da floresta queimada em hectares (ha): 0.00 to 1090.84 a Abordagem Usar um dataset diferente levou a ter que fazer trˆs considera¸˜es pr´ticas: (a) e co a os valores das colunas de nosso dataset est˜o sempre ordenados, consequentea mente n˜o ´ necess´rio implementar um m´todo de ordena¸˜o dentro da fun¸˜o a e a e ca ca Map como fez [5] na linha 2 da figura 4.6, sem correr o risco de contar conjuntos com os mesmos elementos como se fossem diferentes (ex: <beer,cracker> e <cracker,beer>), (b) as vari´veis que representam n´mero reais foram arrea u dondadas para o inteiro mais pr´ximo devido a que n´meros inteiros com dois o u decimais podem ser pouco frequentes e (c) o nome de cada coluna ´ anteposto a e cada valor para evitar confundir dois n´mero inteiros que representam vari´veis u a diferentes. 4.1 Fun¸˜o Map ca Um exemplo da sa´ da fun¸˜o Map, como foi explicado, seriam os subconjunıda ca tos: e a • <X 7,1> o key ´ a vari´vel X, que representa a coordenada do parque sendo um n´mero inteiro, possui o valor 7 e o value igual a 1; u 3
  4. 4. • <Y 5,1> o key ´ a vari´vel Y, que representa a coordenada, possui o valor e a 5 e o value igual a 1; • <month mar,1> a vari´vel mˆs do ano com o valor mar¸o e o value 1; a e c • <X 7,Y 5,1> a combina¸˜o das vari´veis X e Y com valores 7 e 5 respeca a tivamente, formando um novo subconjunto de tamanho 2 e o value 1; ca a e • <X 7 month mar,1> a combina¸˜o das vari´veis X e mˆs com valores 7 e mar¸o respetivamente, formando um novo subconjunto de tamanho 2 e o c value 1; assim cada key ´ um novo subconjunto de tamanho m´ximo definido pelo usu´rio e a a e o valor 1 ´ igual para todos os subconjuntos. e O c´digo da fun¸˜o Map: o ca 1 2 3 4 5 6 7 #! / u s r / b i n / env python # −∗− c o d i n g : u t f −8 −∗− ””” C r e a t e d on Wed Dec 4 0 8 : 4 2 : 1 8 2013 @author : j u a n Os c o m e n t a r i o s nao possuem a c e n t o s para poder u s a r o c o d i g o no r e l a t o r i o em l a t e x ””” 8 9 10 im po rt s y s # i m p o r t a a b i b l i o t e c a que p e r m i t e l e r a e n t r a d a STDIN c o m p a t i v e l com o Hadoop im po rt math 11 12 13 14 15 16 17 d e f l i s t p o w e r s e t ( l s t ) : # f u n c a o que g e r a o s s u b c o n j u n t o s r e s u l t = [ [ ] ] # d e f i n o a l i s t a que t e r a o s s u b c o n j u n t o s for x in l s t : r e s u l t = r e s u l t + [ subset + [ x ] for subset in r e s u l t i f len ( s u b s e t ) < sub max ] # l i s t a com l i s t a s c o n c a t e n a d a s # n e s t a l i n h a cada v e z que a v a r a i v e l x e i g u a l a um novo elemnto , e l a e c o n c a t e n d a com o s a n t e r i o r e s e com o s proximos return r e s u l t [ 1 : ] 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 sub max = 4 #tamanho maximo do s u b c o n j u n t o , s e o d e s e j a d o foram t o d o s o s s u b c o n j u n t o s p o s i v e i s sub max deve s e r i g u a l ao numero t o t a l de v a r i v e i s da b a s e Ex : sub max = 13 h e a d e r = 1 # f l a g que i n d i c a o c a b e c a l h o f o r l i n e i n s y s . s t d i n : # e n t r a d a p r o v e n i n t e do STDIN ( s t a n d a r d input ) l i n e = l i n e . s t r i p ( ) # removendo a f o r m a t a c a o i f h e a d e r == 1 : h e a d e r = 0 # f l a g que i n d i c a o c a b e c a l h o var names = l i n e . s p l i t ( ’ , ’ ) # s e p a r a a s v a r i a v e i s para f a z e r o t r a t a m e n t o do nomes das c o l u n a s else : words = l i n e . s p l i t ( ’ , ’ ) # quebra cada l i n h a em p a l a v r a s ( ou valores ) i n s t a n c e = [ ] # d e f i n o una nova l i s t a c o r r e s p o n d e n t e a cada i n s t a n c i a da b a s e f o r i i n r a n g e ( 0 , l e n ( words ) ) : # c o n c a t e n o o nome de cada c o l u n a com s e u r e s p e t i v o v a l o r usando um i f i < 4 : # as p r i m e i r a s quatro v a r i a v e i s sao s t r i n g i n s t a n c e . append ( var names [ i ] + ’ ’ + words [ i ] ) e l s e : # o r e s t o das v a r i a v e i s s a o numeros r e a i s 4
  5. 5. 33 i n s t a n c e . append ( var names [ i ] + ’ ’ + s t r ( i n t ( round ( f l o a t ( words [ i ] ) ) ) ) ) # arredondamento para o i n t e i r o mais proximo 34 35 a l l s u b s e t = l i s t p o w e r s e t ( i n s t a n c e ) # chama a f u n c a o que c r i a o s sub−c o n j u n t o s 36 37 38 39 f o r s u b s e t i n a l l s u b s e t : # cada s u b s e t e um e l e m e n t o da l i s t a all subset key = ’ ’ . j o i n ( s u b s e t ) # c o n c a t e n a n d o o s e l e m e n t o s e t r a n s f o r m a n d o em s t r i n g p r i n t ’%s t%s ’ % ( key , 1 ) # s a i d a para o Hadoop mapper.py Nossa fun¸˜o Map come¸a com a linha 9 importando a biblioteca sys para ca c poder interagir com o Hadoop usando as entradas e sa´ ıdas standar do sistema operacional. Isso significa que o Hadoop possui a capacidade de executar as fun¸˜es Map e Reduce como sendo comandos do pr´prio sistema. co o As linhas 19 e 20 correspondem ` defini¸˜o de uma constante e uma vari´vel, a ca a a a sub max que limita o tamanho m´ximo do subconjunto e o flag header que indica o tipo de linha de entrada: valor 1 para cabe¸alho e 0 para linhas de c dados. O la¸o principal come¸a na linha 21 executando as fun¸˜es seguintes para c c co cada linha do dataset. Para cada linha lida s˜o removidos os caracteres de a formata¸˜o do texto (linha 23) e posteriormente ´ avaliada a vari´vel header. ca e a Assim, na primeira execu¸˜o ´ lido o cabe¸alho e o nome das vari´veis que ca e c a estavam separadas por virgulas ´ armazenado em var names. A var names ´ e e utilizada nas itera¸˜es posteriores para identificar cada valor de cada vari´vel co a da base e concatena-lo com “ ”como foi explicado no come¸o desta se¸˜o. c ca A linha 27 quebra cada instˆncia do dataset em palavras, assim no la¸o a c principal existem dois loops for que para separar cada linha e cada palavra da base. Entre as linhas 30 e 33 ´ realizada a concatena¸˜o dos valores com o nome e ca das vari´veis, mas de forma separada para os primeiros 4 valores, porque s˜o a a strings, j´ os valores subsequentes s˜o primeiro convertidos no tipo float para a a poder ser arredondados. Todas as linha com seu respetivos valores s˜o armazenados em instance que a sar´ o argumento de entrada para a fun¸˜o mais importante list powerset. a ca Exemplo de instance: [‘X 7’ ‘Y 5’ ‘month mar’ ‘day fri’ ‘FFMC 86’ ‘DMC 26’ ‘DC 94’ ‘ISI 5’ ‘temp 8’ ‘RH 51’ ‘wind 7’ ‘rain 0’ ‘area 0’] A fun¸˜o list powerset (linha 12) cria todas as poss´ ca ıveis combina¸˜es de co subconjuntos. Para isso ´ utilizado um loop f or (linha 14) que seleciona cada e elemento [x] dentro da lista “instˆncia”que foi passada como argumento de a entrada. A cada itera¸˜o o valor [x] ´ combinado com os elementos que j´ ca e a encontram-se na vari´vel result. Esta forma de criar listas em python e conhea cida como comprehension list e permite definir os elementos da lista seguindo a regra definida em ela. ´ E mais simples entender a sa´ da fun¸˜o list powerset com um exemplo. ıda ca Supondo a instˆncia de entrada anterior [‘X 7’ ‘Y 5’ ‘month mar’....] a primeira a execu¸˜o da linha 15 usa o valor x=‘X 7’ e o combina com result retornando ca dentro de result=[[],[‘X 7’]]. O pr´ximo valor de x=‘Y 5’ ´ combinado com os o e anteriores resultando result=[[],[‘X 7’], [‘Y 5’], [‘X 7’ ‘Y 5’]]. Assim o valor de result durante as trˆs primeiras itera¸˜es muda conforme: e co 5
  6. 6. 1. [[], [X 7]] primeira itera¸˜o do loop f or; ca 2. [[], [X 7], [Y 5], [X 7, Y 5]] segunda itera¸˜o do loop f or; ca 3. [[], [X 7], [Y 5], [X 7, Y 5], [month mar], [X 7, month mar], [Y 5, month mar]] terceira itera¸˜o do loop f or. ca ´ preciso destacar que dentro da comprehension list existe uma condi¸˜o if para e ca limitar o tamanho m´ximo do subconjunto especificado pelo valor da constante a sub max, e que a sa´ final ´ uma lista com sub-listas menos a primeira posi¸˜o ıda e ca que possui o valor vazio (linha 17). ıda Retornando da fun¸˜o list powerset as linhas 37 a 39 imprimem na sa´ ca standar do sistema cada key separado por uma tabula¸˜o com o valor 1 (value). ca Esta sa´ ser´ ordenada pelo Hadoop e passada para a fun¸˜o Reduce. ıda a ca 4.2 Fun¸˜o Reduce ca O objetivo da fun¸˜o Reduce ´ contar o numero de ocorrˆncias da cada subconca e e junto igual para determinar a frequˆncia das regras mais repetidas dentro do e dataset. O c´digo da fun¸˜o Reduce ´: o ca e 1 2 3 4 5 6 7 8 9 10 11 #! / u s r / b i n / env python # −∗− c o d i n g : u t f −8 −∗− ””” C r e a t e d on Wed Dec 4 1 4 : 4 5 : 2 0 2013 @author : j u a n ””” im po rt s y s c u r r e n t w o r d = None current count = 0 word = None f r e q u e n c y = 200 12 13 14 15 16 17 18 19 f o r l i n e in sys . stdin : # entrada standar line = line . strip () word , count = l i n e . s p l i t ( ’ t ’ , 1 ) # s e p a r a a s e n t r a d a s dos k e y s e v a l u e s em word e count try : count = i n t ( count ) # c o n v e r t e o v a l o r count num i n t e i r o except ValueError : continue 20 i f c u r r e n t w o r d == word : # v e r i f i c a s e d o i s k e y s s a o i g u a i s e incrmenta o contador c u r r e n t c o u n t += count else : i f c u r r e n t c o u n t >= f r e q u e n c y : # imprime o r e s u l t a d o da soma dos v a l u e s p r i n t ’%s t%s ’ % ( c u r r e n t w o r d , c u r r e n t c o u n t ) c u r r e n t c o u n t = count c u r r e n t w o r d = word 21 22 23 24 25 26 27 28 29 30 if ( ( c u r r e n t w o r d == word ) & ( c u r r e n t c o u n t >= f r e q u e n c y ) ) : p r i n t ’%s t%s ’ % ( c u r r e n t w o r d , c u r r e n t c o u n t ) # imprime o u l t i m o v a l o r de word reducer.py 6
  7. 7. Como comentei anteriormente a fun¸˜o Reduce aproveita o fato que o Haca doop ordena alfabeticamente os keys retornados pela fun¸˜o Map. Assim o for ca da linha 13 lˆ cada subconjunto e o compara com o anterior. Diferentemente e da fun¸˜o Map cada linha de entrada para Reduce ´ um subconjunto e n˜o ca e a uma instˆncia. Entre as linhas 21 e 30 ´ realizada a compara¸˜o, atualizado a e ca os valores de contagem para cada ocorrˆncia repetida ´ imprimido o resultado e e final. A constate frequency ´ usada para imprimir as regras com frequˆncia maior e e ao n´mero definido. Se for usado usado frequency=200, um exemplo de sa´ u ıda seria: rain 0 512 area 0 257 rain 0 area 0 254 Y 4 203 Y 4 rain 0 201 A pr´xima se¸˜o ´ brevemente explicado como executar o MapReduce usando o ca e o Hadoop. 5 Usando o Hadoop Considerando que o Hadoop j´ foi instalado e esta funcionando corretamente a (ver Apˆndice A) os passos para a excuss˜o s˜o: e a a 1. Acessar em um terminal como usu´rio do Hadoop com os respetivos pria vil´gios e criar uma pasta onde ficar´ o dataset mkdir forestfires 1; e a 2. Em um terminal de usu´rio normal do sistema copiar o dataset para dentro a do diret´rio do usu´rio com privil´gios de execu¸˜o do Hadoop, por exemo a e ca plo: sudo cp facultad/Doutorado/Big data/Amazon/forest fires input.txt /home/hduser/forestfire 1/; 3. loggar-se como usu´rio do Hadoop e fazer uma copia do dataset para a a estrutura de arquivos distribu´ com hadoop dfs -copyFromLocal ıda /home/hduser/forestfires 1/ /user/hduser/forestfires 1; 4. copiar a fun¸˜o Map sudo cp facultad/Doutorado/Big data/Amazon ca /mapper.py /home/hduser/; 5. copiar a fun¸˜o Reduce sudo cp facultad/Doutorado/Big data/Amazon ca /reducer.py /home/hduser/; 6. executar a opera¸˜o hadoop jar /usr/lib/hadoop/contrib/streaming ca /hadoop-streaming-1.0.2.jar -file /home/hduser/mapper.py -mapper /home/hduser/mapper.py -file /home/hduser/reducer.py -reducer /home/hduser/reducer.py -input /user/hduser/forestfires 1/* output /user/hduser/forestfires 1-output; 7. para extrair os resultados primeiro criamos uma pasta com mkdir /home/hduser/forestfires 1-output; e 8. para copiar os resultados desde o sistema de arquivos do Hadoop para a pasta de usu´rio hadoop dfs -getmerge /user/hduser/forestfires 1a output /home/hduser/forestfires 1-output 7
  8. 8. Neste trabalho o Hadoop executou de forma local mas pode ser simulada uma distribui¸˜o de tarefas em diferentes cluster com a op¸˜o -D mapred.reduce. ca ca tasks=16. Enquanto o Hadoop estiver funcionando os processos em andamento ou finalizados podem ser monitorados em um browser usando o endere¸o c http://localhost:50030/jobtracker .jsp (figura 1). Figura 1: Estado das tarefas no Hadoop http://localhost:50030/jobtracker.jsp Ap´s a execu¸˜o no terminal do comando hadoop jar /usr/lib/hadoop/o ca contrib /streaming/hadoop-streaming-1.0.2.jar -file /home/hduser/mapper.py -mapper /home/hduser/mapper.py -file /home/hduser/reducer.py -reducer /home/hduser/reducer.py -input /user/hduser/forestfires 1/* -output /user/hduser/forestfires 1-output. Um exemplo da sa´ ´ apresentado na figura 2. ıda e Figura 2: Estado das tarefas no Hadoop no terminal. 8
  9. 9. 6 Interpretando os resultados O resultado da execu¸˜o anterior mostrando os subconjuntos de tamanho m´ximo ca a 4 e frequˆncia maior ou igual a 100 s˜o: e a rain 0 512 area 0 257 rain 0 area 0 254 Y 4 203 Y 4 rain 0 201 month aug 184 month aug rain 0 179 month sep rain 0 172 month sep 172 FFMC 92 133 FFMC 92 rain 0 132 wind 5 130 wind 5 rain 0 127 Y 5 125 Y 5 rain 0 123 Existem algumas informa¸˜es uteis que poder ser extra´ co ıdas do resultado anterior. Um exemplo pode ser encontrar amostras que indiquem um desbalanceamento na base. Exemplo: existem muitas mais amostras sem valores de chuva que com chuva (<rain 0,512>) o que pode causar uma interpreta¸˜o erca rada das outras regras, como por exemplo <rain 0 area 0,254>, induzindo a pensar na existˆncia de uma rela¸˜o direta entre n˜o chuva e n˜o queimada na e ca a a floresta, conclus˜o que parece estar em contra da l´gica. a o Das regras <month aug rain 0,179> e <month sep rain 0,172> podemos interpretar que nos meses de setembro e agosto praticamente n˜o chove no parque. a Tamb´m podemos ver que o ´ e ındice FFMC que indica a umidade nos produtos vegetais ´ baixo quando no chove (<FFMC 92 rain 0,132>). e Assim, como estas regras outras podem ser obtidas, variando o tamanho dos subconjuntos e a frequˆncia m´ e ınima mostrada. 7 Considera¸oes finais c˜ A forma de abordar o problema gerando subconjunto com a fun¸˜o Map n˜o ca a ´ ´tima, porque possui custo exponencial que depende do tamanho m´ximo do eo a subconjunto desejado e com da quantidade de colunas do dataset. O custo da fun¸˜o list powerset na linha 12 da fun¸˜o Map pode ser calculado como: ca ca k i=1 n k k = i=1 n! k! (n − k)! na qual n ´ o n´mero de colunas da base e k igual ` constante sub max. e u a Desta forma podemos calcular a quantidade m´xima de subconjuntos que a podem ser obtidos no nosso dataset quando sub max n˜o for limitado, este a seriam 8191 conjuntos por cada linha da base! Assim a recomenda¸˜o final ´ ca e n˜o use esta abordagem para combinar regras muito grandes! a 9
  10. 10. Referˆncias e [1] C. Chu, Sang Kyun Kim, Yi-An Lin, YuanYuan Yu, Gary Bradski, Andrew Y Ng, and Kunle Olukotun. Map-reduce for machine learning on multicore. Advances in neural information processing systems, 19:281, 2007. [2] P. Cortez and A. Morais. A data mining approach to predict forest fires using meteorological data. In New Trends in Artificial Intelligence, Proceedings of the 13th EPIA 2007 - Portuguese Conference on Artificial Intelligence, pages 512–523, 2007. [3] Anand Rajaraman and Jeffrey David Ullman. Mining of massive datasets. Cambridge University Press, 2012. [4] Tom White. Hadoop: the definitive guide. O’Reilly, 2012. [5] Jongwook Woo and Yuhang Xu. Market basket analysis algorithm with map/reduce of cloud computing. In proc. of the Intl. Conf. on Parallel and Distributed Processing Techniques and Applications (PDPTA 2011), Las Vegas, USA, 2011. 10

×