Rodando um Recomendador no Hadoop usando Mahout

2.601 visualizações

Publicada em

Slides da apresentação para rodar um recomendador do Apache Mahout num cluster usando Hadoop.

Publicada em: Tecnologia
0 comentários
3 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
2.601
No SlideShare
0
A partir de incorporações
0
Número de incorporações
3
Ações
Compartilhamentos
0
Downloads
88
Comentários
0
Gostaram
3
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Rodando um Recomendador no Hadoop usando Mahout

  1. 1. Rodando um recomendadorIvanilton Polato Frank Helbert UTFPR Câmpus Campo Mourão Doutorado em Ciência da Computação DINTER IME/USP-UTFPR Abril/2012 By Ivanilton Polato e Frank Helbert. These slides are licensed under the Atribuição-Uso não-comercial-Compartilhamento pela mesma licença 3.0 Brasil Licence (CC BY-NC-SA 3.0)
  2. 2. Motivações atuais!Grandes quantidades (massivas) de dadosDemoram MUITO para processar serialmente!Máquinas individuais falham!Mais máquinas juntas... probabilidade maior!O número de nós em um cluster não é constante!Computação nas nuvensDisponibilidade de computação e dadosEscalabilidade de aplicaçõesComputação sob demandaFrank HelbertIvanilton Polato 2
  3. 3. Histórico Fonte: Evert Lammerts (SARA.nl) * http://nutch.apache.org/ ** http://labs.google.com/papers/mapreduce.html http://labs.google.com/papers/gfs.htmlFrank HelbertIvanilton Polato 3
  4. 4. HistóricoFev/03 – Primeira biblioteca Map/Reduce na GoogleOut/03 – Artigo sobre GFSDez/04 – Artigo sobre Map ReduceDez/05 – Doug Cutting implementa MR e DFS noNutchFev/06 – Hadoop se torna um projeto oficial daApache, Doug Cutting é contratado pela Yahoo!, queadota o HadoopAbr/07 – Yahoo! roda Hadoop em um cluster de 1000nósJan/08 – Hadoop se transforma em um projetoprincipal da ApacheDez/11 – Apache disponibiliza versão 1.0.0Frank HelbertIvanilton Polato 4
  5. 5. O que é Apache Hadoop?Framework para computação distribuídaUsado em clusters/grades computacionaisMilhares de nósHardware comum (Commodity cluster computing)Petabytes de dadosOpen Source (licença Apache)JavaInspirado originalmente pelo GFS eMapReduce da GoogleFrank HelbertIvanilton Polato 5
  6. 6. Suposições do ProjetoOs dados que serão processados não cabemem um nóCada nó é hardware comumFalhas acontecemMover dados é caroMover computação é baratoComputação distribuída é fácilFrank HelbertIvanilton Polato 6
  7. 7. Suposições do ProjetoIdeias Sistemas de arquivos distribuído Replicação interna Recuperação de falhas automáticas Mover computação para os dados Escrever programas que são fáceis de distribuirFrank HelbertIvanilton Polato 7
  8. 8. Composição do Apache HadoopNúcleo composto por:Hadoop Common: Bibliotecas principaisHDFS: Sistema de arquivosMapReduce: Paradigma de programaçãoProjetos relacionados:HBase: BD distribuído e escalávelHive e Pig: infraestrutura de DWNa web: http://hadoop.apache.org/Frank HelbertIvanilton Polato 8
  9. 9. Possibilidades de uso System Data ... WEB ANALYTICS ...Frank HelbertIvanilton Polato 9
  10. 10. Quem usa?Lista completa:http://wiki.apache.org/hadoop/PoweredByFrank HelbertIvanilton Polato 10
  11. 11. HDFS Hadoop Distributed File SystemBy Ivanilton Polato e Frank Helbert. These slides are licensed under theAtribuição-Uso não-comercial-Compartilhamento pela mesma licença 3.0 Brasil Licence (CC BY-NC-SA 3.0)
  12. 12. HDFS: Hadoop Distributed File SystemSistema de arquivos distribuídoGrande  ordem de 10k nósMilhões de arquivosProjetado para hardware de baixo custoRedundância por replicaçãoTolerância a falhas e recuperaçãoOtimizado para processamento em loteLocalização dos dados expostaGrande largura de banda associadaFrank HelbertIvanilton Polato 12
  13. 13. HDFS: Hadoop Distributed File SystemCoerência dos dadosModelo “write-once-ready-many”Arquivos existentes sofrem apenas operações de“append”Arquivos quebrados em pedaços (blocos)Variam de 64mb (padrão) a 256mbBlocos distribuídos pelos nós (um arquivo é divididoem N blocos e armazenado em M nós)Blocos são replicados e as replicações distribuídasFrank HelbertIvanilton Polato 13
  14. 14. HDFS: Hadoop Distributed File SystemTodos os comandos são executados com o prefixo hadoop fsPrincipais comandos similares unix/linux: ls »» lista arquivos put »» envia arquivos ao fs (origem, destino) get »» copia arquivos do fs (origem, destino) rm »» remove arquivos do fs rmr »» remove arquivos e diretórios do fs cat »» mostra o conteúdo de arquivo no fsFrank HelbertIvanilton Polato 14
  15. 15. MapReduceBy Ivanilton Polato e Frank Helbert. These slides are licensed under theAtribuição-Uso não-comercial-Compartilhamento pela mesma licença 3.0 Brasil Licence (CC BY-NC-SA 3.0)
  16. 16. A ideiaA ideia do paradigma de programação Map eReduce não é novaProvavelmente 40+ anos!No Hadoop é a parte do frameworkresponsável pelo processamento distribuído(paralelo) de grandes conjuntos de dados.Provê um modelo de programaçãoUsa padrões já conhecidos: cat | grep | sort | unique > file input | map | shuffle | reduce > outputFrank HelbertIvanilton Polato 16
  17. 17. A natureza do MapReduceMap em programação funcionalmap({1,2,3,4}, (x2))  {2,4,6,8}Todos os elementos são processados por um métodoe os elementos não afetam uns aos outrosReduce em programação funcionalreduce({1,2,3,4}, (x))  {24}Todos elementos na lista são processados juntosTanto em Map quanto em Reduce:A entrada é fixa (imutável), e a saída é uma nova listaFrank HelbertIvanilton Polato 17
  18. 18. Continuando...O paradigma MapReduce é adequado paratrabalhar com grandes quantidades de dadosRealiza computação sobre os dados (poucamovimentação de dados)Utiliza os blocos armazenados no DFS, logo nãonecessita divisão dos dadosLida com o paralelismoUm Map por bloco, se possívelFrank HelbertIvanilton Polato 18
  19. 19. MapReduce no HadoopA função Map atua sobre um conjunto deentrada com chaves e valores, produzindo umalista de chaves e valoresA função Reduce atua sobre os valoresintermediários produzidos pelo Map para,normalmente, agrupar os valores e produzir asaídaFrank HelbertIvanilton Polato 19
  20. 20. Exemplos: Word CountLê arquivos texto e conta a frequência daspalavrasEntrada: arquivos textoSaída: arquivo textoCada linha: palavra, separador (tab), quantidadeMap: gera pares de (palavra, quantidade)Reduce: para cada palavra, soma asquantidadesFrank HelbertIvanilton Polato 20
  21. 21. Map e Reduce (Pseudo-código)map(String key, String value): // key: document name // value: document contents for each word w in value: EmitIntermediate(w, “1”);reduce(String key, Iterator values): // key: a word // values: a list of counts int result = 0; for each v in values: result += ParseInt(v); Emit(AsString(result));Frank HelbertIvanilton Polato 21
  22. 22. Funcionamento em um clusterBy Ivanilton Polato e Frank Helbert. These slides are licensed under theAtribuição-Uso não-comercial-Compartilhamento pela mesma licença 3.0 Brasil Licence (CC BY-NC-SA 3.0)
  23. 23. MapReduce: Simplified Data Processing on Large Jeffrey Dean e Sanjay Ghemawat ACM, 200Frank HelbertIvanilton Polato 23
  24. 24. HDFS: NameNode & DataNodes Fonte: Evert Lammerts (SARA.nl)NameNode (NN) DataNode (DN)Gerencia o namespace do sistema de Servidor de blocos que armazenaarquivos Dados no sistema de arquivos localMapeia nomes de arquivos para blocos Metadados dos blocos (hash)Mapeia blocos para DataNodes Disponibiliza metadados para clientesGerenciamento de replicaçãoFrank HelbertIvanilton Polato 24
  25. 25. MapReduce: JobTracker & TaskTrackers Fonte: Evert Lammerts (SARA.nl)JobTracker TaskTrackersControla os metadados Solicita trabalho do JTStatus de um job Busca código para executar do DFSStatus de Tasks nos TTs Aplica configurações específicas dosDecide o escalonamento jobs Comunicam-se com o JT nas tasks Enviar saídas, atualizações de tasks, matar tasks, ...Frank HelbertIvanilton Polato 25
  26. 26. MahoutBy Ivanilton Polato e Frank Helbert. These slides are licensed under theAtribuição-Uso não-comercial-Compartilhamento pela mesma licença 3.0 Brasil Licence (CC BY-NC-SA 3.0)
  27. 27. Apache MahoutÉ uma biblioteca de algoritmos deaprendizagem de máquinaÉ um projeto da Apache Software Foundation Software Livre – Licença Apache Bem documentado Contribuição da ComunidadePrincipal objetivo: Ser escalável para manipular volume gigantesco de dadosFrank HelbertIvanilton Polato 27
  28. 28. Apache MahoutTrabalha com: Matrizes e Vetores, Estruturasesparsas e densas, Agrupamento, Cobertura,K-Means, Análise densidade de funções,Filtragem colaborativa, Taste – motor defiltragemMahout pode ser usado com o Hadoopexplorando a escalabilidade para processar osdadosFrank HelbertIvanilton Polato 28
  29. 29. Gerando recomendações1. Construir uma matriz que relaciona os itens Matriz de co-ocorrência Computa o número de vezes que cada par de itens aparecem juntos na lista de preferências de algum usuário Se existem 9 usuários que expressam preferência pelos itens X e Y, então X e Y co-ocorrem 9 vezes Co-ocorrência é como similaridade, quanto mais dois itens aparecem juntos, mais provável que sejam similares Frank Helbert Ivanilton Polato 29
  30. 30. Gerando recomendações Matriz de co-ocorrência para um conjunto de dados com sete itensFrank HelbertIvanilton Polato 30
  31. 31. Gerando recomendações2. Computando o vetor de cada usuário Um vetor para cada usuário Com n itens na base de dados, o vetor de preferências terá n dimensões Se o usuário não exprime nenhuma preferência por um determinado item, o valor correspondente no vetor será zero Neste exemplo, o vetor do usuário três é [2.0, 0.0, 0.0, 4.0, 4.5, 0.0, 5.0] Frank Helbert Ivanilton Polato 31
  32. 32. Gerando recomendações3. Computando as recomendações Para computar as recomendações para o usuário três, basta multiplicar seu vetor pela matriz de co- ocorrência Computar cada valor da saída corresponde a estimar a preferência por um determinado item Frank Helbert Ivanilton Polato 32
  33. 33. Gerando recomendaçõesMultiplicando a matriz de co-ocorrência com o vetor de preferências do usuário três para chegar ao vetor que nos leva às recomendações Frank Helbert Ivanilton Polato 33
  34. 34. Gerando recomendaçõesIntuitivamente, olhando para a linha 3 databela, se o item desta linha co-ocorre commuitos itens que o usuário 3 expressou suapreferência, então é provável que seja algo queo usuário 3 gosteFrank HelbertIvanilton Polato 34
  35. 35. Rodando o recomendadorBy Ivanilton Polato e Frank Helbert. These slides are licensed under theAtribuição-Uso não-comercial-Compartilhamento pela mesma licença 3.0 Brasil Licence (CC BY-NC-SA 3.0)
  36. 36. Integrando o Mahout no HadoopPrecisamos do RecommenderJobModo Newbie: Apenas coloque o JAR pré-compilado da distribuição do Mahout no diretório do hadoop. mahout-core-0.6-job.jarModo Expert: Faça as alterações necessárias no Mahout para sua persolnalização, gere o JAR e coloque no diretório do hadoop.Frank HelbertIvanilton Polato 36
  37. 37. Chamada do Mahout no Hadoop:~$ bin/hadoop jar mahout-core-0.6-job.jar org.apache.mahout.cf.taste.hadoop.item.Rec ommenderJob -Dmapred.input.dir=input/movieRec10M.txt - Dmapred.output.dir=outputCosine --usersFile input/movieUsers.txt --numRecommendations 10 --maxPrefsPerUser 100 --similarityClassname SIMILARITY_COSINEFrank HelbertIvanilton Polato 37
  38. 38. Formato dos dadosO recomendador do Mahout espera que osdados estejam da forma:RecommenderJob (org.apache.mahout.cf.taste.hadoop.item.RecommenderJob) userID,itemID[,preferencevalue] UserID é um Long ItemID é um Long Preferencevalue é um DoubleFrank HelbertIvanilton Polato 38
  39. 39. Carregar os dados no HDFSComando:hadoop fs -put <caminho_local_do_arquivo><caminho_do_arquivo_no_hdfs>Ex::~$ hadoop fs -putmoviesRecommendation1M.txtinput/moviesRec.txtFrank HelbertIvanilton Polato 39
  40. 40. Executando o RecomenderJobParâmetros de chamada:--usersFile(path): (xor) arquivo contendo os Ids dos usuários considerados na computação--itemsFile(path): (xor) arquivo contendo os Ids dos itens;--numRecommendations(integer): número de recomendações computadas por usuário (padrão:10)--booleanData(boolean): tratar a entrada como não tendo valores de preferência (padrão:falso)--maxPrefsPerUser(integer): número máximo de preferências consideradas por usuário (padrão:10)Frank HelbertIvanilton Polato 40
  41. 41. Executando o RecomenderJobParâmetros de chamada:--similarityClassname(classname): (obrigatório) medida de similaridade; SIMILARITY_COOCCURRENCE SIMILARITY_LOGLIKELIHOOD SIMILARITY_TANIMOTO_COEFFICIENT SIMILARITY_CITY_BLOCK SIMILARITY_COSINE SIMILARITY_PEARSON_CORRELATION SIMILARITY_EUCLIDEAN_DISTANCEFrank HelbertIvanilton Polato 41
  42. 42. Mão na massa...By Ivanilton Polato e Frank Helbert. These slides are licensed under theAtribuição-Uso não-comercial-Compartilhamento pela mesma licença 3.0 Brasil Licence (CC BY-NC-SA 3.0)
  43. 43. AtividadeEm gruposRodar o Hadoop na máquina local Pseudo-Distributed modeColocar rating para 10 filmes que já assistiuEnviar arquivos para o HDFSRodar o recomendadorAplicar script python nos resultadosJuntar recomendações e rodar exemplo no cluster (fully distributed mode)Frank HelbertIvanilton Polato 43
  44. 44. Instalando Hadoop (Pseudo-Distributed)Extraia o conteúdo do arquivohadoop-1.0.1-pre-config.tar.gz no seu homeDentro de hadoop-1.0.1/conf altere: hadoop-env.sh (alterar linha 9: java home) DE: /usr/lib/jvm/java-6-openjdk PARA: /usr/lib/jvm/java-6-sun OU: verifique sua versão do java!Verifique os 3 arquivos .xml no diretório conf: core-site.xml hdfs-site.xml mapred-site.xmlFrank Helbert 44Ivanilton Polato
  45. 45. Instalando Hadoop (Pseudo-Distributed)Verifique o ssh da máquina. A maquina deve se conectar ao localhost sem necessidade de password.:~$ ssh localhostAgora vamos formatar (criar) o HDFS::~$ bin/hadoop namenode -formatE agora vamos inicializar o Hadoop (start-Frank HelbertIvanilton Polato 45
  46. 46. Preenchendo com suas recomendaçõesEdite o arquivo yourRec.txt e coloque suas recomendações nele: Crie um id único a partir de 1000 (chute um valor); Procure no arquivo filmes.txt por filmes que você já assistiu e classifique-os com nota de 1 a 5. Cada linha de seu arquivo deverá conter a seguinte estrutura: <user_id_criado>,<id_filme>,<rating> ex: 1977,123,4 Faça isto para no mínimo dez filmes.Frank HelbertIvanilton Polato 46
  47. 47. Preenchendo com suas recomendaçõesAgora vamos juntar suas recomendações com o arquivo de recomendações de outros usuários com o comando::~$ cat yourRec.txt >> rec.txtEdite o arquivo user.txt que contenha apenas uma linha com seu user_id criado nela.Frank HelbertIvanilton Polato 47
  48. 48. Enviando arquivos ao HDFSAgora que os arquivos estão preenchidos, envie seus dois arquivos para o fs com os comandos::~$ bin/hadoop fs -put rec.txt input/rec.txt:~$ bin/hadoop fs -put user.txt input/user.txtFrank HelbertIvanilton Polato 48
  49. 49. Rodando o RecommenderJobVerificar se o arquivo mahout-core-0.6-job.jar está no diretório raiz do hadoop.A partir do diretório raiz do hadoop, executar o comando::~$ bin/hadoop jar mahout-core-0.6-job.jarorg.apache.mahout.cf.taste.hadoop.item.Reco mmenderJob-Dmapred.input.dir=input/rec.txt -Dmapred.output.dir=output--usersFile input/user.txt Frank Helbert--numRecommendations 10 Ivanilton Polato 49
  50. 50. Resultados!Acesse em seu navegador: http://localhost:50070/ Opção: “Browse the filesystem”Verificar os filmes recomendados para você usando o script imprimeFilmes.py com o seguinte comando::~$ python imprimeFilmesFrank HelbertIvanilton Polato 50
  51. 51. Referências:LivrosHadoop – The Definitive GuideTom White – 2ª Ed.Hadoop in ActionChuck Lam – 1ª Ed. Mining of Massive Datasets Rajaraman, A. & Ullman, J.D., 2011 Mahout in Action Owen, S. et al., Manning, 2011Web: http://wiki.apache.org/hadoop/Frank HelbertIvanilton Polato 51
  52. 52. ApêndiceCriar chave ssh e permitir acesso sem senha::~$ sudo apt-get install ssh:~$ ssh-keygen -t rsa:~$ cat .ssh/id_rsa.pub >> authorized_keys:~$ ssh localhostFrank HelbertIvanilton Polato 52

×