• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Rodando um Recomendador no Hadoop usando Mahout
 

Rodando um Recomendador no Hadoop usando Mahout

on

  • 2,068 views

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

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

Statistics

Views

Total Views
2,068
Views on SlideShare
2,066
Embed Views
2

Actions

Likes
2
Downloads
63
Comments
0

2 Embeds 2

http://www.twylah.com 1
http://www.slashdocs.com 1

Accessibility

Categories

Upload Details

Uploaded via as OpenOffice

Usage Rights

CC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike LicenseCC Attribution-NonCommercial-ShareAlike License

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

    Rodando um Recomendador no Hadoop usando Mahout Rodando um Recomendador no Hadoop usando Mahout Presentation Transcript

    • 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)
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • Possibilidades de uso System Data ... WEB ANALYTICS ...Frank HelbertIvanilton Polato 9
    • Quem usa?Lista completa:http://wiki.apache.org/hadoop/PoweredByFrank HelbertIvanilton Polato 10
    • 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)
    • 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
    • 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
    • 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
    • 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)
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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)
    • MapReduce: Simplified Data Processing on Large Jeffrey Dean e Sanjay Ghemawat ACM, 200Frank HelbertIvanilton Polato 23
    • 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
    • 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
    • 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)
    • 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
    • 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
    • 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
    • Gerando recomendações Matriz de co-ocorrência para um conjunto de dados com sete itensFrank HelbertIvanilton Polato 30
    • 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
    • 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
    • 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
    • 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
    • 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)
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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)
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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
    • 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