Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Construindo Soluções Científicas com Big Data & MapReduce

4,620 views

Published on

My Presentation at PythonBrasil 2012 about building scientific solutions with Big Data and MapReduce using Python.

Published in: Technology
  • Follow the link, new dating source: ♥♥♥ http://bit.ly/36cXjBY ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here
  • Sex in your area is here: ♥♥♥ http://bit.ly/36cXjBY ♥♥♥
       Reply 
    Are you sure you want to  Yes  No
    Your message goes here

Construindo Soluções Científicas com Big Data & MapReduce

  1. 1. Construindo Soluções Científicas com Big Data & MapReduce Marcel Caraciolo @marcelcaraciolo
  2. 2. Quem é Marcel ?Sergipano, porém recifense.Mestre em Ciência da ComputaçãoCo-founder Pingmind & PyCursosCientista-Chefe do Atepassar.comEvangelista Python, programador e admirador das “ciências ocultas”providas pela Inteligência ArtificialEscritor de blog:http://www.mobideia.com & http://aimotion.blogspot.com
  3. 3. Antes da Computação DaComputação Distribuída
  4. 4. Depois da Computação Da Computação Distribuída
  5. 5. Big Data, muitos dados. !"#$%"$#&()")( !"#$%&(%$)*%+%),-+.),#$$) *#/(#*)01.#2%03) *$+,(!"#$%"$#&()")( !41-%$)*%+%5)6$70)5)1$-18)0+9#%25) :%1.-(#)7#(#9%+#*5);2$)#+1<3)
  6. 6. !"#$%&()*"+$#" !"#$%*(.-.%7/,( !"#$%$&( 500%6&216%./7%!.281&%0#.(1%,"-./%(-0"&12%3/&124.(1% <$8(=.&.( )*+,"-.%(/%"01( !"#$%&"()%*+% ;-(5*5"+(/"5607-8( 91:.-/*1(9-.%7/,( 9211/%7.&.%(1/&21% <#.6)%!1-2=% :(3.#%AB!% :#37%6&.&1%723;1% ,>!?@% 2"-&*3&(.4.+*(/"5607-8(
  7. 7. !"#$%&()#*+$$,-.#(/$$ $011$*2))23$-.45#$67#&7$-7$8$9-&."$:;<:=$ $<$23$>$?3@#&3#@$67#&7$"-5#$-$,-.#(/$ $-..63@$ $$ $9&#$@"-3$>;$(2))23$A2#.#7$8$.3@#3@$BC#($ $)23/7=$3#C7$7@&2#7=$()D$A7@7=$3@#7=$A"@$ $-)(6*7=$#@.EF$7"-&#G$#-."$*3@"E$$ $H)G7$>;%I$8$G-@-$8&$-3-)J727=$-GG7$<:$!I$8$ $.*A&#77#G$G-@-$G-2)J$
  8. 8. "<&!B,:+&*C!!"#$%&!! !())!*$++$,-!./&/0!12)!*$++$,-!34$+5!6#&&6/! !789!:$++$,-!/&4;<!=.&$&/!4!345! !>!"?!3464!@,!4-4+5/$/!A&-&46&3!34$+5! !!
  9. 9. "<&!B,:+&*C!!"#$%&!! !())!*$++$,-!./&/0!12)!*$++$,-!34$+5!6#&&6/! !789!:$++$,-!/&4;<!=.&$&/!4!345! !>!"?!3464!@,!4-4+5/$/!A&-&46&3!34$+5! !!
  10. 10. >,$!F(-G7$4H!!"#$%&&(!! !)*+!#,-.&/0!.$(1!!2++!#,-.&/0!3#$4! !5$6-44$/0!3#$4!0&378!9-(!!*+++!.$(! !):!;<!0&#&!9-(!&/&783!=$/$(&#$0!0&378! !! >(&03?-/&7!0&#&!#-(&=$1!#$6,/3@.$!A!&/&783! #--7!B.#!0-!/-#!C-(D!&#!#,$$!6&7$!E! !
  11. 11. !"#$%&&$%"()*+",*+$-./0$ $ 12) .,12()$$ .& .& 12) $ .&3"4$ .)1,5"4$
  12. 12. Hadoop
  13. 13. !"#$%&%(#)**+%,% !"#$%&"#()*(+(%"(&"#(,-.%/#-/0,#12, "(,3#4-("#*%4/,%&0/#*-#$."5,2-#44%)3 2)()#/62,721-2882*%/9.(,*6(,#:
  14. 14. !"#$%&()"*&+&*",)-&$( !"#$%%!&((#)&#&*!+)(,-%. .//$)0(,123(),45(%#4)0&)6(%&4(,)07&4(&$)484(&94:1(%*#,7&0))6432",)-&$(4 ;#%))%#4)0&)6(%&2177&4(104(#**#<)0=#>))" ?300107@///4)64&,+&,4)0=#>))"
  15. 15. !"#$%&()*+),) !"##$%&"()*+,-.&/01&*23$4,5%&6 78193:&1:08&5&93;/"##$%&<= )&,819>;$3;& -&./0&)01)2.(00$)$&034/)
  16. 16. !"#$%&"#"$$()&*$+"$,&-../$0"#-$1.2$ 3+456.%+&7$-&*&$&8&79"+"$ :#;*$<+8+84=$/&>#28"$"#&2%)$ ?&%)+8#$7.4$&8&79"+"$ @#.A"/&%+B&7$&8&79"+"$ :2#8-$C8&79"+"$ @#8.<#$C8&79"+"$ D204$D+"%.E#29$ F2&0-$&8-$%.</7+&8%#$<&8&4#<#8*$ G+-#.$&8-$+<&4#$&8&79"+"$
  17. 17. !"#$%&&$()*##+$,$-#./$-0&1$2$34)5#.637$$2$8)9:##;$$2$<##/-$$2$=>?$$2$@0&.A$2$B)&1CD4$$2$EF$G#H;$I04&$$2$G)"##J$$2$IF0KH$2$B0.;*$0.$$$$$
  18. 18. !"#$$%&($)*)+,&-& <;;=%%(%:& /?+@%& A;B5%& C25::& 12+34#& 96:;& 0>;;(& !56%& 758& !"#$%& #()%*+,%-!./0&
  19. 19. !"#$$%&#()*+,-$.&/&
  20. 20. !"#$%&(& !""# $%&()*+&,#-&.&/&010#
  21. 21. !"#$%&()&& !""# !"#$$%&#()*+,)-#&./-&(0()-1&
  22. 22. !"#$$%&$(%$)*)+,&-&!89:&&&&5"%&6*#71*&.$/&+0"12*0&3",2&30"12*0&4"(*&4$#*&
  23. 23. MapReducehttp://labs.google.com/papers/mapreduce.html
  24. 24. Exemplo de MapReduce from mrjob.job import MRJob import re WORD_RE = re.compile(r"[w]+") class MRWordFreqCount(MRJob): def mapper(self, _, line): for word in WORD_RE.findall(line): yield (word.lower(), 1) def reducer(self, word, counts): yield (word, sum(counts)) if __name__ == __main__: MRWordFreqCount().run()
  25. 25. Projeto MrJob Criado pela Equipe de Engenharia do Yelp Totalmente Open-Source Todo em Python Utiliza Map-Reduce para ProcessamentoPermite rodar tanto no Amazon EMR como no Hadoop
  26. 26. Objetivos do MrJobs Se você quer aprender MapReduce, ele é para vocêSe você tem um problema cavalar e precisa de muitoprocessamento e não está afim de mexer em HadoopSe você já tem um cluster Hadoop e quer rodar scripts Python Se você quer migrar seu código Python do Hadoop para o EMRSe você não quer escrever Python (Impossível!), não é para você!
  27. 27. Passos importantes sudo easy_install mrjob
  28. 28. Vamos a uma demo...Texto da posse de Obama em 2009.
  29. 29. Desempenho MapReduce
  30. 30. Mais informaçõeshttp://packages.python.org/mrjob/ https://github.com/Yelp/mrjob
  31. 31. Distributed Computing with mrJob https://github.com/Yelp/mrjobElsayed et al: Pairwise Document Similarity in Large Collections with MapReduce
  32. 32. Distributed Computing with mrJob https://github.com/Yelp/mrjobElsayed et al: Pairwise Document Similarity in Large Collections with MapReduce
  33. 33. Atepassar Recommendations http://atepassar.comProblema: Como recomendar novos amigos ?
  34. 34. Atepassar Recommendations http://atepassar.com
  35. 35. Atepassar Recommendations http://atepassar.commarcel;jonas,maria,jose,amanda "marcel" [["carol", 2], ["fabio", 1], ["fabiola", 1], ["patricia", 1], ["paula", 1]]maria;carol,fabiola,amanda,marcel "maria" [["jose", 2], ["patricia", 2], ["jonas", 1], ["paula", 1]]amanda;paula,patricia,maria,marcel "patricia" [["maria", 2], ["jose", 1], ["marcel", 1], ["paula", 1]]carol;maria,jose,patricia "paula" [["jonas", 1], ["marcel", 1], ["maria", 1], ["patricia", 1]]fabiola;maria "amanda" [["carol", 2], ["fabio", 1], ["fabiola", 1], ["jonas", 1], ["jose", 1]]paula;fabio,amanda "carol" [["amanda", 2], ["marcel", 2], ["fabiola", 1]]patricia;amanda,carol "fabio" [["amanda", 1], ["marcel", 1]]jose;marcel,carol "fabiola" [["amanda", 1], ["carol", 1], ["marcel", 1]]jonas;marcel,fabio "jonas" [["amanda", 1], ["jose", 1], ["maria", 1], ["paula", 1]]fabio;jonas,paula "jose" [["maria", 2], ["amanda", 1], ["jonas", 1], ["patricia", 1]]carla $python friends_recommender.py - r emr --num-ec2-instances 5 facebook_data.csv > output.dat
  36. 36. Atepassar Recommendations http://atepassar.commarcel;jonas,maria,jose,amanda "marcel" [["carol", 2], ["fabio", 1], ["fabiola", 1], ["patricia", 1], ["paula", 1]]maria;carol,fabiola,amanda,marcel "maria" [["jose", 2], ["patricia", 2], ["jonas", 1], ["paula", 1]]amanda;paula,patricia,maria,marcel "patricia" [["maria", 2], ["jose", 1], ["marcel", 1], ["paula", 1]]carol;maria,jose,patriciafabiola;maria marcel;jonas,maria,jose,amanda 1], ["patricia", 1]] "paula" [["jonas", 1], ["marcel", 1], ["maria", "amanda" [["carol", 2], ["fabio", 1], ["fabiola", 1], ["jonas", 1], ["jose", 1]]paula;fabio,amanda carol;maria,jose,patricia ["marcel", 2], ["fabiola", 1]] "carol" [["amanda", 2],patricia;amanda,caroljose;marcel,carol fabio;jonas,paula [["amanda", 1], ["marcel", 1]] "fabio" "fabiola" [["amanda", 1], ["carol", 1], ["marcel", 1]]jonas;marcel,fabio ... "jonas" [["amanda", 1], ["jose", 1], ["maria", 1], ["paula", 1]]fabio;jonas,paula "jose" [["maria", 2], ["amanda", 1], ["jonas", 1], ["patricia", 1]]carla $python friends_recommender.py - r emr --num-ec2-instances 5 facebook_data.csv > output.dat
  37. 37. Atepassar Recommendations http://atepassar.com fsim(u,i) = w1 f1(u,i) + w2 f2(u,i) + b,https://gist.github.com/3970945#file_atepassar_recommender.py
  38. 38. Atepassar Recommendations http://atepassar.comCelery - para agendamento dos jobs coletores e executores.mrJob - para mapreduce e acesso ao HadoopMongoDb - para armazenamento das recomendaçõesBoto - acesso aos files do S3.
  39. 39. Benchmarks Pure Python Python w/ Scipy MapReduce Dataset w/ dicts and Numpy (100 nodes small) MovieLens ~28 hrs ~12hrs ~= 5 hrs 100khttp://www.grouplens.org/node/73 Pure python - Crab Crab Scipy Numpy Crab w/ MapReduce
  40. 40. Benchmarks Pure Python Python w/ Scipy MapReduce Dataset w/ dicts and Numpy (100 nodes small) MovieLens ~28 hrs ~12hrs ~= 5 hrs 100k http://www.grouplens.org/node/73 Pure python - Crab Crab Scipy Numpy Crab w/ MapReduceTime ellapsed ( Top-N similar items) 0 7.5 15 22.5 30
  41. 41. Benchmarks Pure Python Python w/ Scipy MapReduce Dataset w/ dicts and Numpy (100 nodes small) MovieLens ~28 hrs ~12hrs ~= 5 hrs 100k http://www.grouplens.org/node/73 Pure python - Crab Crab Scipy Numpy Crab w/ MapReduceTime ellapsed ( Top-N similar items) 0 7.5 15 22.5 30
  42. 42. Benchmarks Pure Python Python w/ Scipy MapReduce Dataset w/ dicts and Numpy (100 nodes small) MovieLens ~28 hrs ~12hrs ~= 5 hrs 100k http://www.grouplens.org/node/73 Pure python - Crab Crab Scipy Numpy Crab w/ MapReduceTime ellapsed ( Top-N similar items) 0 7.5 15 22.5 30
  43. 43. Benchmarks Pure Python Python w/ Scipy MapReduce Dataset w/ dicts and Numpy (100 nodes small) MovieLens ~28 hrs ~12hrs ~= 5 hrs 100k http://www.grouplens.org/node/73 Pure python - Crab Crab Scipy Numpy Crab w/ MapReduceTime ellapsed ( Top-N similar items) 0 7.5 15 22.5 30
  44. 44. A melhor parte!
  45. 45. Projetos interessantes Pandas: a data analysis library for Python, poised to give R a run for its money… http://pandas.pydata.org/Estrutura de dados para manipulação rápida - slicing - indexing - subsetingHandling missing dataAgregações, Séries Temporais
  46. 46. Projetos interessantes http://discoproject.org/Outro framework para computação distribuída comPython com MapReduce.Criado pelo Instituto Nokia.Backend dele é escrito em Erlang (funcional,concorrente e bem escalável!)Não utiliza o FileSystem mais usado HDFS e sim umnovo padrão por eles (DDFS).
  47. 47. Projetos interessantesPython & MongoDb http://api.mongodb.org/python/2.0/examples/ map_reduce.html MongoDb - Banco de Dados Não relacional (NoSQL) Possui suporte nativo built-in para fazer MapReduce. Escrever o código em JS e não é muito legível e fica preso ao Mongo ... >>> reduce = Code("function (key, values) {" ... " var total = 0;" ... " for (var i = 0; i < values.length; i++) {" ... " total += values[i];" ... " }" ... " return total;" ... "}")
  48. 48. Projetos interessantesDumbohttps://github.com/klbostee/dumbo/wiki/Short-tutorialUma das primeiras bibliotecas em cima doMapReduce e Python.Complicado para começar e está desatualizada :(
  49. 49. Projetos interessantes http://pydoop.sourceforge.net/docs/index.htmlUm wrapper em Python em cima do Hadooppara computação distribuída.Legal, mas dá um trabalho para configurar.
  50. 50. Projetos interessanteshttps://developers.google.com/appengine/docs/python/ dataprocessing/ Mapreduce com Python na Google AppEngine Ainda experimental e fica “preso” à plataforma AppEngine.
  51. 51. Projetos interessantes http://scikit-learn.org/stable/Algoritmos de aprendizagem de máquinaSupervisionados & Não supervisionadosPré-processamento, extração de dadosAvaliação de classificadores, Pipeline,seleção de atributos.
  52. 52. Projetos interessantes http://nltk.org/Processamento de linguagem naturalVárias ferramentas para tokenização,pos tagging, named entity recognition,classificadores, etc.Vários corpus disponíveis!
  53. 53. Projetos interessantes http://nltk.org/Processamento de linguagem natural Fiquem de olho...Várias Pipeline for distributed Natural Language Processing, made in Python ferramentas para tokenização, https://github.com/NAMD/pyplnpos tagging, named entity recognition,classificadores, etc.Vários corpus disponíveis!
  54. 54. Projetos interessantes Our Project’s Home Pagehttp://muricoca.github.com/crab
  55. 55. Future ReleasesPlanned Release 0.13 New home for python-recsys: https://github.com/python-recsys/crab New commiters: vinnigracindo, ocelma, fcurellaPlanned Release 0.14 Support to Item-Based Recommenders using MapReduce with MrJob
  56. 56. Join us!1. Read our Wiki Page https://github.com/muricoca/crab/wiki/Developer-Resources2. Check out our current sprints and open issues https://github.com/muricoca/crab/issues3. Forks, Pull Requests mandatory4. Join us at irc.freenode.net #muricoca or at our discussion list http://groups.google.com/group/scikit-crab
  57. 57. Vários outros ... Numpy milk NetworkX Orange MatplotlibScipy StatsModels PyBrain
  58. 58. Livros recomendados
  59. 59. Livros recomendados For free...http://shop.oreilly.com/product/0636920022640.do?cmp=il-radar-ebooks-big-data-now-radar
  60. 60. Livros recomendados For free...http://infolab.stanford.edu/~ullman/mmds/book.pdf
  61. 61. Artigos recomendados For free... http://aimotion.blogspot.com.br/2012/10/atepassar- recommendations-recommending.htmlhttp://aimotion.blogspot.com.br/2012/08/introduction-to- recommendations-with.html
  62. 62. Artigos recomendados For free... http://aimotion.blogspot.com.br/2012/10/atepassar- recommendations-recommending.htmlhttp://aimotion.blogspot.com.br/2012/08/introduction-to- recommendations-with.html https://github.com/marcelcaraciolo/recsys-mapreduce-mrjob
  63. 63. Construindo Soluções Científicas com Big Data & MapReduce Marcel Caraciolo @marcelcaraciolo marcel@atepassar.com

×