Big Blog Analysis

477 views
395 views

Published on

Apresentação feita no MongoSP, 28 Julho 2012.

A mineração de dados sobre blogs é uma tarefa difícil devido ao seu grande volume da dados. O MongoDB é uma ótima solução para distribuir os dados em shards, dentro de um cluster de computadores, e analisar as informações com tarefas MapReduce sobre 30 milhões de postagens coletadas de usuários Brasileiros.

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
477
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Big Blog Analysis

  1. 1. Big Blog AnalysisSharding e Map/Reducecom MongoDBMongoSP Henrique DiasJulho 13, 2012 Universidade Federal do Rio Grande do Sul
  2. 2. RoteiroSharding(distribuição)Map/Reduce(paralelismo)Ex.: TF-IDF , PageRank
  3. 3. Trabalho Analista de T.I. na UFRGS Sistemas em PHP Banco de dados Relacional
  4. 4. Trabalho Analista de T.I. na UFRGS Sistemas em PHP Banco de dados Relacional
  5. 5. Pesquisa Mestrando na UFRGS Mineração de Dados Cluster, Paralelismo, Distribuído
  6. 6. Pesquisa Mestrando na UFRGS Mineração de Dados Cluster, Paralelismo, Distribuído
  7. 7. Projeto de MestradoAnálise de Blogs
  8. 8. Projeto de MestradoAnálise de Blogs● Dados de posts, sem esquema● Milhões de posts● Dados distribuídos● Processamento Paralelo
  9. 9. Projeto de MestradoAnálise de Blogs● Dados de posts, sem esquema● Milhões de posts● Dados distribuídos● Processamento ParaleloMongoDB serve!
  10. 10. "Não há bala de prata" Fred Brooks 86
  11. 11. ProblemaAutores de Blogs Populares em Tópicos
  12. 12. ProblemaAutores de Blogs Populares em Tópicos Coleta de Blogs para o MongoDB
  13. 13. ProblemaAutores de Blogs Populares em Tópicos Coleta de Blogs para o MongoDB Map/Reduce PageRank
  14. 14. ProblemaAutores de Blogs Populares em Tópicos Coleta de Blogs para o MongoDB Map/Reduce PageRank recomendação de Tags com TF-IDF distribuído
  15. 15. Sharding Shard London Bridge
  16. 16. Processos MongoDBmongod --shardsvr Mongo Mongo Mongo Shard Shard Shardmongod --configsvr Mongo tolerância Config à falhasmongos --configdb mongos router
  17. 17. Shardingmongod --shardsvr --dbpath /home/mongodb/base --port 27018mongod --shardsvr --dbpath /home/mongodb/base2 --port 27010mongod --configsvr --dbpath /home/mongodb/config --port 27019
  18. 18. Shardingmongos --configdb localhost:27019mongo> use admin> db.runCommand({ addshard: "localhost:27018" });> db.runCommand({ addshard: "localhost:27010" });
  19. 19. Sharding> db.runCommand( { enablesharding : "blogdb" } );> db.runCommand( { shardcollection : "posts", key : "shardKey" });
  20. 20. Shard Key?blogID, content, publishedDatetags, postID, commentsauthorID, title
  21. 21. Shard Key!blogID, content, publishedDatetags, postID, commentsauthorID, title
  22. 22. Virtual Shards VM (8GB 4vP) VM (8GB 4vP) Mongo Mongo Mongo Mongo Shard Shard Shard Shard VM (8GB 4vP) Mongo Mongo Mongo Config Shard Shard
  23. 23. Conjunto de Dados758,102 blogs30,635,902 posts21,467,340 commentstam. méd. obj: 1.8mb
  24. 24. Post em JSON{ "_id" : ObjectId("4e92239ee4b020f5ff0041fb"), "authorID" : "10757528238954720127", "blogID" : "1000004267813776424", "postID" : "4057761886666222842", "published" : ISODate("2011-03-24T12:00:00Z"), "title" : "Quis autem vel eum", "content" : "Lorem ipsum dolor sit amet...", "tags" : [ "voluptatem" , "accusantium" ], "comments" : [ { "commentID" : "77618861000004262228", "authorID" : "00627699636039248506", "published" : ISODate("2011-03-24T12:12:11.645Z"), "content" : "Neque porro quisquam est,..." }]}
  25. 25. Map/Reduce
  26. 26. Map/Reduce Local MAP Reduce Reduceregistros
  27. 27. Map/Reduce Local MAP Reduce Reduceregistros key,value key,value key,value
  28. 28. Map/Reduce Local MAP Reduce Reduceregistros shuffle combine key,value key,value key,value
  29. 29. Map/Reduce Local MAP Reduce Reduceregistros shuffle combine key,value key,value saída key,value
  30. 30. Map/Reduce documentos MAP Reduce política ... saúde ... saúde, 1 carros ... saúde, 143 cinema ... futebol, 1 futebol, 230 moda ... futebol ... política, 85 livros ... ... política, 1 filmes ... ... ...
  31. 31. Map/Reduce MongoDBFunções JavaScript> map = function() { this.content.split( ).forEach( function(word){ emit( word, 1 ); }); }> reduce = function(key, values) { var count = 0; values.forEach(function(value) { count += value; } ); return count; }> db.posts.mapReduce(map, reduce, {out: { inline : 1}});
  32. 32. Map/Reduce MongoDB Mongo Mongo Mongo Shard Shard Shard mongos dispara
  33. 33. Map/Reduce MongoDB map map map reduce reduce reduce Mongo Mongo Mongo Shard Shard Shard mongos
  34. 34. Map/Reduce MongoDB reduce Mongo Mongo Mongo Shard Shard Shard mongos
  35. 35. TópicosTF-IDF Distribuídopara recomendação de Tags
  36. 36. TF-IDFMétrica de RelevânciaPalavra x Tag x Global
  37. 37. TF-IDFTF: Frequência do Termo |t| tf(t,d) = |T|IDF: Frequência inversa nos documentos |D| idf(t,D) = log |{d ∈ D : t ∈ d}|tf x idf (t,d,D) = tf(t,d) x idf(t,D)
  38. 38. TF-IDFLorem ipsum dolor sit amet, consecteturadipisicing elit, sed do eiusmod temporincididunt ut labore et dolore magna aliqua.Ut enim ad minim veniam, quis nostrudexercitation ullamco laboris nisi ut aliquip exea commodo consequat.Duis aute irure dolor in reprehenderit involuptate velit esse cillum dolore eu fugiatnulla pariatur.Excepteur sint magna occaecat cupidatat nonproident, sunt in culpa qui officia deseruntmollit anim id est laborum.
  39. 39. TF-IDFLorem ipsum dolor sit amet, consecteturadipisicing elit, sed do eiusmod temporincididunt ut labore et dolore magna aliqua.Ut enim ad minim veniam, quis nostrudexercitation ullamco laboris nisi ut aliquip exea commodo consequat.Duis aute irure dolor in reprehenderit involuptate velit esse cillum dolore eu fugiatnulla pariatur.Excepteur sint magna occaecat cupidatat nonproident, sunt in culpa qui officia deseruntmollit anim id est laborum.
  40. 40. TF-IDFN = 70, D = 100Lorem ipsum dolor sit amet, consecteturadipisicing elit, sed do eiusmod temporincididunt ut labore et dolore magna aliqua.Ut enim ad minim veniam, quis nostrudexercitation ullamco laboris nisi ut aliquip exea commodo consequat.Duis aute irure dolor in reprehenderit involuptate velit esse cillum dolore eu fugiatnulla pariatur.Excepteur sint magna occaecat cupidatat nonproident, sunt in culpa qui officia deseruntmollit anim id est laborum.
  41. 41. TF-IDFN = 70, D = 100Lorem ipsum dolor sit amet, consectetur tf(magma,d) = 2/70 idf(magma,D) = 100/4adipisicing elit, sed do eiusmod temporincididunt ut labore et dolore magna aliqua.Ut enim ad minim veniam, quis nostrudexercitation ullamco laboris nisi ut aliquip exea commodo consequat.Duis aute irure dolor in reprehenderit involuptate velit esse cillum dolore eu fugiatnulla pariatur.Excepteur sint magna occaecat cupidatat nonproident, sunt in culpa qui officia deseruntmollit anim id est laborum.
  42. 42. TF-IDFN = 70, D = 100Lorem ipsum dolor sit amet, consectetur tf(magma,d) = 2/70 idf(magma,D) = 100/4adipisicing elit, sed do eiusmod temporincididunt ut labore et dolore magna aliqua. tf-idf(magna,d,D) = 0,09Ut enim ad minim veniam, quis nostrudexercitation ullamco laboris nisi ut aliquip exea commodo consequat.Duis aute irure dolor in reprehenderit involuptate velit esse cillum dolore eu fugiatnulla pariatur.Excepteur sint magna occaecat cupidatat nonproident, sunt in culpa qui officia deseruntmollit anim id est laborum.
  43. 43. TF-IDFN = 70, D = 100Lorem ipsum dolor sit amet, consectetur tf(magma,d) = 2/70 idf(magma,D) = 100/4adipisicing elit, sed do eiusmod temporincididunt ut labore et dolore magna aliqua. tf-idf(magna,d,D) = 0,09Ut enim ad minim veniam, quis nostrudexercitation ullamco laboris nisi ut aliquip exea commodo consequat. tf(in,d) = 3/70Duis aute irure dolor in reprehenderit in idf(in,D) = 100/65voluptate velit esse cillum dolore eu fugiatnulla pariatur.Excepteur sint magna occaecat cupidatat nonproident, sunt in culpa qui officia deseruntmollit anim id est laborum.
  44. 44. TF-IDFN = 70, D = 100Lorem ipsum dolor sit amet, consectetur tf(magma,d) = 2/70 idf(magma,D) = 100/4adipisicing elit, sed do eiusmod temporincididunt ut labore et dolore magna aliqua. tf-idf(magna,d,D) = 0,09Ut enim ad minim veniam, quis nostrudexercitation ullamco laboris nisi ut aliquip exea commodo consequat. tf(in,d) = 3/70Duis aute irure dolor in reprehenderit in idf(in,D) = 100/65voluptate velit esse cillum dolore eu fugiatnulla pariatur. tf-idf(in,d,D) = 0,01Excepteur sint magna occaecat cupidatat nonproident, sunt in culpa qui officia deseruntmollit anim id est laborum.
  45. 45. TF-IDF Map/ReduceValores necessários:n: Ocorrências de p em uma tag ( Tarefa 1 )N: Nº palavras em uma tag ( Tarefa 2 )d: Nº de tags que p aparece ( Tarefa 3 )D: Total de tags ( Tarefa 2 )
  46. 46. TF-IDF Tarefa 1 Entrada MAP Reduce Posts{ tags, conteúdo } { tag , palavra } , 1 somatório da palavra para a tag { tag , palavra } , n
  47. 47. TF-IDF Tarefa 1Mapfunction(){ var tags = this.tags; this.content.split( ). forEach(function(sWord){ tags.forEach(function(sTag){ emit ( { tag: sTag , word: sWord } , 1 ); }); });};
  48. 48. TF-IDF Tarefa 1Reducefunction( key , values ){ var count = 0; values.forEach( function(value) { count += value; }); return count;};
  49. 49. TF-IDF Tarefa 1Resultado{_id: {tag:"saúde", word:"doença" } values : 98 }{_id: {tag:"política", word:"leis" } values : 13 }{_id: {tag:"saúde", word:"saúde" } values : 32 }{_id: {tag:"política", word:"crise" } values : 45 }{_id: {tag:"saúde", word:"corpo" } values : 98 }{_id: {tag:"saúde", word:"para" } values : 34 }{_id: {tag:"2012", word:"de" } values : 65 }...
  50. 50. TF-IDF Tarefa 2 Entrada MAP Reduce{ tag, palavra } , n tag , n somatório dos contadores tag , N
  51. 51. TF-IDF Tarefa 2Resultado{_id: "saúde", values : 670 }{_id: "política", values : 830 }{_id: "futebol", values : 700 }{_id: "2012", values : 1500 }...Combina o resultado com o anterior
  52. 52. TF-IDF Tarefa 2Resultado{tag:"saúde", word:"doença" } n:98, N:670{tag:"política", word:"leis" } n:13, N:830{tag:"saúde", word:"saúde" } n:32, N:670{tag:"política", word:"crise" } n:45, N:830{tag:"saúde", word:"corpo" } n:98, N:670{tag:"saúde", word:"para" } n:34, N:670{tag:"2012", word:"de" } n:65, N:1500...
  53. 53. TF-IDF Tarefa 3 Entrada MAP Reduce{ tag, palavra } , n palavra , 1 documentos que a palavra aparece palavra , d
  54. 54. TF-IDF Tarefa 3Resultado{_id: "doença", values : 45 }{_id: "leis", values : 23 }{_id: "saúde", values : 80 }{_id: "crise", values : 41 }{_id: "corpo", values : 30 }{_id: "para", values : 350 }{_id: "de", values : 480 }...Combina resultados anteriores
  55. 55. TF-IDF CálculoResultado{tag:"saúde", word:"doença" } n:98, N:670, d:45{tag:"política", word:"leis" } n:13, N:830, d:23{tag:"saúde", word:"saúde" } n:32, N:670, d:80{tag:"política", word:"crise" } n:45, N:830, d:41{tag:"saúde", word:"corpo" } n:98, N:670, d:30...> D = db.TFIDF_Tarefa2.count();> db.TagsTFIDF.find().forEach(function(item){ item.tfidf = (item.n/item.N)*Math.log(D/item.d) });
  56. 56. TF-IDF Resultado Saúde Política Futebol saúde deputado gols água presidente time doenças governo futebol pele contra equipe corpo Dilma gol sintomas ministro jogador animais Ministério Copa alimentos Estado contra crianças política rodada células Câmara partida ... ... ...
  57. 57. PopularidadePageRank Distribuído
  58. 58. _ ___ __ __ _ PageRank
  59. 59. _ ___ __ __ _ PageRank
  60. 60. _ ___ __ __ _ PageRank
  61. 61. _ ___ __ __ _ PageRank
  62. 62. PageRank 80 _ _ _ _ 9_ _ __ _
  63. 63. PageRank 80 _ 40 _ _ _ 40 9_ 3 _ __ _ 3 3
  64. 64. PageRank 80 _ 40 40 _ _ _ 40 9_ 3 43 _ __ _ 3 3
  65. 65. PageRank Map/ReduceTarefa 1: Lista de ID usuário x IDs Autores comentadosTarefa 2: Iterações propagando os valores de PageRank
  66. 66. PageRank Tarefa 1 Entrada MAP Reduce PostauthorID, Comentários userID , authorID lista de autores comentados por userID , [authorIDs]
  67. 67. PageRank Tarefa 1Query{tags: "saúde"}Mapfunction(){ var idAuthor = this.authorID; this.comments.forEach ( function (comment) { if (comment.userID!=idAuthor) { emit ( comment.userID , [ idAuthor ] ); } });};
  68. 68. PageRank Tarefa 1Reducefunction( key , values ){ var outL = []; values.forEach( function(value) { outL = outL.concat(value); }); return outL;};
  69. 69. PageRank Tarefa 1Resultado{ _id: "00627699636039248506" , values: [ "10757528238954720121", "40577618866662228425", "10000042678137764244", ... ]}
  70. 70. PageRank Tarefa 2 Entrada MAP ReduceuserID , [authorIDs] authorID , PR/N valor do PageRank de cada Autor authorID , PageRank
  71. 71. PageRank Tarefa 2Mapfunction(){ var prK = this.value.pr/this.value.outL.length; this.value.outL.forEach ( function (authorID) { emit ( authorID, { pr:prK , outL:[] , prOld: 0 } ); }); if (this.value.outL.length + prK > 0) emit ( this._id , { pr: 0 , outL: this.value.outL , prOld: this.value.pr } );};
  72. 72. PageRank Tarefa 2Reducefunction( key , values ){ var result = { pr:0 , outL:[] , prOld:0 }; values.forEach(function(value) { result.pr += value.pr; result.outL = result.outL.concat(value.outL); result.prOld += value.prOld; }); return result;};Processo deve executar até PageRank convergir
  73. 73. PageRank Resultado Saúde Política Futebol refugiad bigbost medob stardoll militar valcabra coturnon polibio gesptec welovefr fator hugogoes fcoelies tribodo novoblog angelori hempada bigbothe forbidde blogdop blogdoma ... ... ...
  74. 74. Processo OfflineDesempenho?
  75. 75. Tempo ExecuçãoPageRank: 65.650.470ms (~18h)TF-IDF: 108.213.056ms (~30h)
  76. 76. Por que?Memória CompartilhadaDisco Virtual SataJS Single-ThreadMap/Reduce JS LocksTamanho do Objeto BSON
  77. 77. $olução!CloudFiber ChannelDividir em mais $hards"ticket SERVER-4258 will allow multi-threading"Reduzir o tamanho do BSON
  78. 78. Próximos Passos150 Milhões de PostsProcesso Online com mais $hard$NMF, K-Means em Map/Reduce
  79. 79. Obrigado! Dúvidas?inf.ufrgs.br/~hdpsantos(código-fonte e dados)hdpsantos@inf.ufrgs.brMongoSP Henrique DiasJulho 13, 2012 Universidade Federal do Rio Grande do Sul
  80. 80. Durabilidade?
  81. 81. Reparar os DadosrepairDatabase()versões anterioreshoje: journaling
  82. 82. Backup dos Dadosmongoexport - json, csvmongodump - bson
  83. 83. GoogleCompute Engine
  84. 84. AWS Free Usage TierTeste com Single Shard● EC2 m1.xlarge● EBS 20GB
  85. 85. AWS Free Usage TierTeste com Single Shard● EC2 m1.xlarge● EBS 20GB Mesmo desempenho! (para single shard)
  86. 86. Nossa Infra-estrutura?
  87. 87. Um Dell Server 4 Xeon Quad-core 24 GB RAM 2 x 1TB SATA
  88. 88. Coleta Mongo Mongo Mongo Shard Shard Shard Mongo Mongo Mongo Shard Shard Shard Mongo 7x mongos Config 70 Coletores

×