Hadoop et les graphes                     HUG France, 17/10/2012© OCTO 2012                                   1
AGENDADes outils pour traiter des graphes ?Modèle relationnel et SQLNeo4jHadoop & consorts    Généralités    MapReduce    ...
Des outils pour traiter des graphes ?                                      GraphDBRelationnel              MapReduceBSP   ...
Modèle relationnel et SQL                            4
Modèle relationnel et SQL         Edge  FKVertex   FK                                      5
Modèle relationnel et SQL-- Recherche des voisins de :source_idselect      vertex.*from      vertex      join edge on edge...
Modèle relationnel et SQL-- Recherche des voisins des voisinsselect -- [distinct]      vertex.*from      vertex      join ...
Modèle relationnel et SQL  -- Déductions de niveau arbitraire  ???  -- Peut-être avec les CTE(*) si supportées !  -- (* Co...
Modèle relationnel et SQLAdapté pour des accès TP ciblés sur les nœuds !    Grâce à l’ndexation des nœudsMais en requêtage...
Neo4j        10
Neo4jGraph                                               Vertex           Vertex                             Vertex       ...
Neo4j                                                   Construction du traverser// API Traversal de Neo4j == automatefor ...
Neo4j// Cypher == DSL de pattern matching (and more...)   Nœud de départSTART me=node:node_auto_index(name = "me")        ...
Neo4j                                             Fonction de coût des                                            nœuds/li...
Neo4jTrès bonnes perfs en TP (avec ACID) et en mono-serveurTrès bonnes perfs en requêtage (Traversal, DSL) sur des parcour...
Hadoop & consorts                    16
Hadoop & consortsDeux bénéfices attendus avec Hadoop & consorts        Répartir et traiter des graphes très gros (≥ 1B nœu...
Hadoop & consortsExploration depth-first : difficile à paralléliser                         Vtx          Vtx              ...
Hadoop & consortsExploration breadth-first avec MapReduce                          Vtx        Vtx                         ...
Hadoop & consorts                -- Requête Hive, un air de déjà vu :)                select                      vertex.*...
Hadoop & consortsAlgorithme BSP adapté aux graphes : le modèle de Google Pregel       API « vertex-centric » reposant sur ...
Hadoop & consortsBSP en pratique – Superstep 1                    Vtx         Vtx                                      Vtx...
Hadoop & consortsBSP en pratique – Superstep 2                    Vtx         Vtx                                      Vtx...
Hadoop & consortsBSP en pratique – Superstep 3                    Vtx         Vtx                                      Vtx...
Hadoop & consortsBSP en pratique – Superstep 4                    Vtx         Vtx                                      Vtx...
Hadoop & consortsBSP en pratique – Superstep 5                    Vtx         Vtx                                      Vtx...
Hadoop & consortsBSP en pratique – Fin du job                     Vtx       Vtx                                     Vtx   ...
Hadoop & consortsAutre exemple                Vtx   Vtx                            Vtx   Src          Vtx   Vtx           ...
Hadoop et consorts// Code vertex-centric avec Hama 0.5.0public static class ShortestPathVertex extends      Vertex<Text, I...
Hadoop & consortsApplications        Recherche de chemins        Calcul d’indicateurs sur les nœuds (centralité, …)       ...
Conclusion             31
ConclusionLes critères qui différencient les outils sont        Distribué vs non (ou peu) distribué        Traitement loca...
Quelques liens pour finirLe papier de Google décrivant Pregel    http://portal.acm.org/citation.cfm?id=1807167.1807184Les ...
Upcoming SlideShare
Loading in...5
×

Hadoop Graph Analysis par Thomas Vial

3,451

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,451
On Slideshare
0
From Embeds
0
Number of Embeds
5
Actions
Shares
0
Downloads
27
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Hadoop Graph Analysis par Thomas Vial

  1. 1. Hadoop et les graphes HUG France, 17/10/2012© OCTO 2012 1
  2. 2. AGENDADes outils pour traiter des graphes ?Modèle relationnel et SQLNeo4jHadoop & consorts Généralités MapReduce Hive, Pig BSP : Hama et GiraphConclusionLiens utiles 2
  3. 3. Des outils pour traiter des graphes ? GraphDBRelationnel MapReduceBSP 3
  4. 4. Modèle relationnel et SQL 4
  5. 5. Modèle relationnel et SQL Edge FKVertex FK 5
  6. 6. Modèle relationnel et SQL-- Recherche des voisins de :source_idselect vertex.*from vertex join edge on edge.to_id = vertex.idwhere edge.from_id = :source_id Vertex Source Vertex 6
  7. 7. Modèle relationnel et SQL-- Recherche des voisins des voisinsselect -- [distinct] vertex.*from vertex join edge e2 on e2.to_id = vertex.id join edge e1 on e1.from_id = e2.to_idwhere e1.from_id = :source_id Vertex Vertex Source Vertex Vertex 7
  8. 8. Modèle relationnel et SQL -- Déductions de niveau arbitraire ??? -- Peut-être avec les CTE(*) si supportées ! -- (* Common Table Expressions) Vertex Vertex Vertex Vertex Source Vertex VertexVertex Vertex 8
  9. 9. Modèle relationnel et SQLAdapté pour des accès TP ciblés sur les nœuds ! Grâce à l’ndexation des nœudsMais en requêtage le langage SQL a vite des limites Niveaux de profondeurs multiples, élevés ou non connus à l’avance Peut-être une piste du côté des Common Table ExpressionsPour les algos de graph processing, il faut faire de l’itératif Mais chaque nœud du graphe parcouru induit au moins 1 accès aléatoire sur le disque (lookup de l’index de FK)La scalabilité du modèle est celle du SGBD Quelques nœuds de stockage/traitement Quelle clef de partitionnement pour des requêtes optimales ? 9
  10. 10. Neo4j 10
  11. 11. Neo4jGraph Vertex Vertex Vertex Vertex Vertex Vertex Vertex Vertex VertexVertex & Edge properties 11
  12. 12. Neo4j Construction du traverser// API Traversal de Neo4j == automatefor ( Path position : Traversal.description() .depthFirst() Méthode de parcours .relationships( Rels.KNOWS ) .relationships( Rels.LIKES, Direction.INCOMING ) .evaluator( Evaluators.toDepth( 5 ) ) .traverse( node ) ) { Prédicats d’étapes Prédicats d’étapes// Traitement du chemin ‘position’} Limite de profondeur Nœud de départ// Alternative : langage Gremlin (TinkerPop) 12
  13. 13. Neo4j// Cypher == DSL de pattern matching (and more...) Nœud de départSTART me=node:node_auto_index(name = "me") de la rechercheMATCH me-[r1:ATE]->food<-[r2:ATE]-you==== me,count(distinct r1) as H1,count(distinct r2) as H2,you ====MATCH me-[r1:ATE]->food<-[r2:ATE]-youRETURN uneFonctionCompliquée(…)as similarity Patterns sur les relations & nœuds connectés Expression de retour 13
  14. 14. Neo4j Fonction de coût des nœuds/liens traversés, à minimiser// Recherche de plus court cheminPathFinder algo = GraphAlgoFactory.dijkstra(expander, costEval);Iterable res = algo.findAllPaths(startNode, endNode);// Algos disponibles// - énumération des chemins (complets ou de longueur L)// - recherche du plus court chemin (A*, Dijkstra) 14
  15. 15. Neo4jTrès bonnes perfs en TP (avec ACID) et en mono-serveurTrès bonnes perfs en requêtage (Traversal, DSL) sur des parcours decomplexité moyenneLe TP, le pattern-matching et les algorithmes pré-câblés permettent de traiterbien plus de cas qu’avec un graphe modélisé en SQL Les algos pré-câblés sont en nombre limité mais les API Traversal et Evaluator permettent d’en implémenter sans limitationMais, Neo4j est aujourd’hui mono-serveur Il n’est pas encore capable de sharder un graphe Il peut tout de même stocker des millions de nœuds sur un seul serveurDes bases graphes distribuées à surveiller Titan (Aurelius) Trinity (Microsoft) – non publique 15
  16. 16. Hadoop & consorts 16
  17. 17. Hadoop & consortsDeux bénéfices attendus avec Hadoop & consorts Répartir et traiter des graphes très gros (≥ 1B nœuds, au-delà de Neo4j sur du commodity) Paralléliser les traitements… si l’algorithme s’y prêteLe tout au prix d’une approche exclusivement batchReprésentation typique d’un graphe dirigé en fichier HDFS : liste d’adjacence V3 V5 V1V2 V2 V3,V4V1 V2 V3 V4,V5 ... V4 17
  18. 18. Hadoop & consortsExploration depth-first : difficile à paralléliser Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx VtxExploration breadth-first : parallélisable ! Vtx Vtx Vtx Computation Src Vtx Vtx Vtx nodes Vtx Vtx 18
  19. 19. Hadoop & consortsExploration breadth-first avec MapReduce Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx Job Job Job Job Oozie ou while() {…} 19
  20. 20. Hadoop & consorts -- Requête Hive, un air de déjà vu :) select vertex.* from vertex join edge on edge.to_id = vertex.id where edge.from_id = :source_id Vertex SourceUn script Pig fait aussi le job ! Vertex 20
  21. 21. Hadoop & consortsAlgorithme BSP adapté aux graphes : le modèle de Google Pregel API « vertex-centric » reposant sur du passage de messages entre les sommets … typiquement le long des arcs Vertex Inbox Compute() Outbox Coordinateur 21
  22. 22. Hadoop & consortsBSP en pratique – Superstep 1 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 22
  23. 23. Hadoop & consortsBSP en pratique – Superstep 2 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 23
  24. 24. Hadoop & consortsBSP en pratique – Superstep 3 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 24
  25. 25. Hadoop & consortsBSP en pratique – Superstep 4 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 25
  26. 26. Hadoop & consortsBSP en pratique – Superstep 5 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 26
  27. 27. Hadoop & consortsBSP en pratique – Fin du job Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 27
  28. 28. Hadoop & consortsAutre exemple Vtx Vtx Vtx Src Vtx Vtx Src Vtx Vtx 28
  29. 29. Hadoop et consorts// Code vertex-centric avec Hama 0.5.0public static class ShortestPathVertex extends Vertex<Text, IntWritable, IntWritable> {@Overridepublic void compute(Iterator<IntWritable> messages) throws IOException { int minDist = isStartVertex() ? 0 : Integer.MAX_VALUE;while (messages.hasNext()) { IntWritable msg = messages.next();if (msg.get() < minDist) { minDist = msg.get(); } }if (minDist <this.getValue().get()) {this.setValue(new IntWritable(minDist));for (Edge<Text, IntWritable> e : this.getEdges()) { sendMessage(e, new IntWritable(minDist + e.getValue().get())); } } else { voteToHalt(); } }} 29
  30. 30. Hadoop & consortsApplications Recherche de chemins Calcul d’indicateurs sur les nœuds (centralité, …) … tout ce qui nécessite une exploration complète d’un gros graphe … du moment que l’algorithme peut se traiter avec du passage de messagesHAMA 0.5.0 Top-level project Apache Framework « BSP pur » avec une surcouche pour les graphes Repose sur YARNGiraph 0.1-alpha En incubation chez Apache Framework calqué sur le papier Google Pregel : « BSP pour les graphes » Twitter, Facebook, Yahoo! … committers sur le projet Repose sur MapReduce (les mappers bouclent sur les supersteps, pas de reducer) 30
  31. 31. Conclusion 31
  32. 32. ConclusionLes critères qui différencient les outils sont Distribué vs non (ou peu) distribué Traitement local vs global de la topologie du graphe Top. locale Top. globale (BSP) MapReduce HAMA Distribué Hive, Pig Giraph Titan, Trinity ? Peu distribué Neo4j et équivalents SQL 32
  33. 33. Quelques liens pour finirLe papier de Google décrivant Pregel http://portal.acm.org/citation.cfm?id=1807167.1807184Les sites Apache de Hama & Giraph http://hama.apache.org/ http://incubator.apache.org/giraph/Le site de Titan https://github.com/thinkaurelius/titan/wikiDes articles du blog OCTO traitant de graphes http://blog.octo.com/bases-de-donnees-graphes-un-tour-dhorizon/ http://blog.octo.com/introduction-aux-graphes-avec-neo4j-et-gephi/ http://blog.octo.com/en/introduction-to-large-scale-graph-processing/ 33
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×