Hadoop Graph Analysis par Thomas Vial
Upcoming SlideShare
Loading in...5
×
 

Like this? Share it with your network

Share

Hadoop Graph Analysis par Thomas Vial

on

  • 3,572 views

 

Statistics

Views

Total Views
3,572
Views on SlideShare
1,150
Embed Views
2,422

Actions

Likes
1
Downloads
21
Comments
0

5 Embeds 2,422

http://hugfrance.fr 2411
http://translate.googleusercontent.com 5
https://si0.twimg.com 4
http://ranksit.com 1
https://www.google.fr 1

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

CC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs LicenseCC Attribution-NonCommercial-NoDerivs 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

Hadoop Graph Analysis par Thomas Vial Presentation Transcript

  • 1. Hadoop et les graphes HUG France, 17/10/2012© OCTO 2012 1
  • 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. Des outils pour traiter des graphes ? GraphDBRelationnel MapReduceBSP 3
  • 4. Modèle relationnel et SQL 4
  • 5. Modèle relationnel et SQL Edge FKVertex FK 5
  • 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. 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. 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. 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. Neo4j 10
  • 11. Neo4jGraph Vertex Vertex Vertex Vertex Vertex Vertex Vertex Vertex VertexVertex & Edge properties 11
  • 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. 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. 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. 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. Hadoop & consorts 16
  • 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. 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. Hadoop & consortsExploration breadth-first avec MapReduce Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx Job Job Job Job Oozie ou while() {…} 19
  • 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. 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. Hadoop & consortsBSP en pratique – Superstep 1 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 22
  • 23. Hadoop & consortsBSP en pratique – Superstep 2 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 23
  • 24. Hadoop & consortsBSP en pratique – Superstep 3 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 24
  • 25. Hadoop & consortsBSP en pratique – Superstep 4 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 25
  • 26. Hadoop & consortsBSP en pratique – Superstep 5 Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 26
  • 27. Hadoop & consortsBSP en pratique – Fin du job Vtx Vtx Vtx Src Vtx Vtx Vtx Vtx Vtx 27
  • 28. Hadoop & consortsAutre exemple Vtx Vtx Vtx Src Vtx Vtx Src Vtx Vtx 28
  • 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. 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. Conclusion 31
  • 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. 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