Ce diaporama a bien été signalé.
Le téléchargement de votre SlideShare est en cours. ×

Hadoop Graph Analysis par Thomas Vial

Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Publicité
Chargement dans…3
×

Consultez-les par la suite

1 sur 33 Publicité
Publicité

Plus De Contenu Connexe

Diaporamas pour vous (20)

Les utilisateurs ont également aimé (20)

Publicité

Similaire à Hadoop Graph Analysis par Thomas Vial (20)

Plus par HUG France (20)

Publicité

Hadoop Graph Analysis par Thomas Vial

  1. 1. Hadoop et les graphes HUG France, 17/10/2012 © OCTO 2012 1
  2. 2. AGENDA Des outils pour traiter des graphes ? Modèle relationnel et SQL Neo4j Hadoop & consorts Généralités MapReduce Hive, Pig BSP : Hama et Giraph Conclusion Liens utiles 2
  3. 3. Des outils pour traiter des graphes ? GraphDB Relationnel MapReduce BSP 3
  4. 4. Modèle relationnel et SQL 4
  5. 5. Modèle relationnel et SQL Edge FK Vertex FK 5
  6. 6. Modèle relationnel et SQL -- Recherche des voisins de :source_id select vertex.* from vertex join edge on edge.to_id = vertex.id where edge.from_id = :source_id Vertex Source Vertex 6
  7. 7. Modèle relationnel et SQL -- Recherche des voisins des voisins select -- [distinct] vertex.* from vertex join edge e2 on e2.to_id = vertex.id join edge e1 on e1.from_id = e2.to_id where 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 Vertex Vertex Vertex 8
  9. 9. Modèle relationnel et SQL Adapté pour des accès TP ciblés sur les nœuds ! Grâce à l’ndexation des nœuds Mais 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 Expressions Pour 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. Neo4j Graph Vertex Vertex Vertex Vertex Vertex Vertex Vertex Vertex Vertex Vertex & Edge properties 11
  12. 12. Neo4j Construction du traverser // API Traversal de Neo4j == automate for ( 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épart START me=node:node_auto_index(name = "me") de la recherche MATCH 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]-you RETURN 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 chemin PathFinder 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. Neo4j Très bonnes perfs en TP (avec ACID) et en mono-serveur Très bonnes perfs en requêtage (Traversal, DSL) sur des parcours de complexité moyenne Le TP, le pattern-matching et les algorithmes pré-câblés permettent de traiter bien 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 limitation Mais, 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 serveur Des bases graphes distribuées à surveiller Titan (Aurelius) Trinity (Microsoft) – non publique 15
  16. 16. Hadoop & consorts 16
  17. 17. Hadoop & consorts Deux 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ête Le tout au prix d’une approche exclusivement batch Représentation typique d’un graphe dirigé en fichier HDFS : liste d’adjacence V3 V5 V1V2 V2 V3,V4 V1 V2 V3 V4,V5 ... V4 17
  18. 18. Hadoop & consorts Exploration depth-first : difficile à paralléliser Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx Exploration breadth-first : parallélisable ! Vtx Vtx Vtx Computation Src Vtx Vtx Vtx nodes Vtx Vtx 18
  19. 19. Hadoop & consorts Exploration 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 Source Un script Pig fait aussi le job ! Vertex 20
  21. 21. Hadoop & consorts Algorithme 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 & consorts BSP en pratique – Superstep 1 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 22
  23. 23. Hadoop & consorts BSP en pratique – Superstep 2 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 23
  24. 24. Hadoop & consorts BSP en pratique – Superstep 3 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 24
  25. 25. Hadoop & consorts BSP en pratique – Superstep 4 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 25
  26. 26. Hadoop & consorts BSP en pratique – Superstep 5 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 26
  27. 27. Hadoop & consorts BSP en pratique – Fin du job Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 27
  28. 28. Hadoop & consorts Autre exemple Vtx Vtx Vtx Src Vtx Vtx Src Vtx Vtx 28
  29. 29. Hadoop et consorts // Code vertex-centric avec Hama 0.5.0 public static class ShortestPathVertex extends Vertex<Text, IntWritable, IntWritable> { @Override public 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 & consorts Applications 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 messages HAMA 0.5.0 Top-level project Apache Framework « BSP pur » avec une surcouche pour les graphes Repose sur YARN Giraph 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. Conclusion Les 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 finir Le papier de Google décrivant Pregel http://portal.acm.org/citation.cfm?id=1807167.1807184 Les sites Apache de Hama & Giraph http://hama.apache.org/ http://incubator.apache.org/giraph/ Le site de Titan https://github.com/thinkaurelius/titan/wiki Des 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

×