2015-02-19 22 views
11

Ho appena iniziato la mia escursione ai metodi e agli strumenti di elaborazione del grafico. Ciò che fondamentalmente facciamo - contiamo alcune metriche standard come pagerank, coefficiente di clustering, conteggio dei triangoli, diametro, connettività, ecc. In passato era felice con Octave, ma quando abbiamo iniziato a lavorare con grafici che diciamo 10^9 nodi/bordi abbiamo bloccato .Neo4j o GraphX ​​/ Giraph cosa scegliere?

nuvola Così le possibili soluzioni possono essere distribuite fatto con Hadoop/Giraph, Spark/Graphx, Neo4j su di essi, ecc

Ma dal momento che io sono un principiante, qualcuno può consigliare ciò che è effettivamente scegliere? Non ho avuto la differenza quando usare Spark/GraphX ​​e quando Neo4j? In questo momento considero Spark/GraphX, poiché ha più sintassi Python allo stesso modo, mentre neo4j ha il proprio Cypher. La visualizzazione in neo4j è interessante ma non utile in così larga scala. Non capisco c'è un motivo per usare un ulteriore livello di software (neo4j) o semplicemente usare Spark/GraphX? Da quando ho capito neo4j non salverà così tanto tempo come se lavorassimo con hadoop puro vs Giraph o GraphX ​​o Hive.

Grazie.

risposta

5

GraphX ​​è più di un framework di elaborazione in tempo reale per i dati che possono essere (ed è meglio quando) rappresentati in un modulo grafico. Con GraphX ​​è possibile utilizzare vari algoritmi che richiedono grandi quantità di potenza di elaborazione (sia RAM che CPU) e con neo4j è possibile (in modo affidabile) mantenere e aggiornare tali dati. Questo è quello che suggerirei.

So per certo che @kennybastani ha fatto alcuni progressi molto interessanti in quell'area, puoi dare un'occhiata alla sua soluzione mazerunner. Viene anche spedito come immagine mobile, in modo da poterti colpire con un bastone e scoprire da solo se ti piace o no.

Questa immagine distribuisce un contenitore con Apache Spark e utilizza Graphx a eseguire ETL analisi grafico su sottografi esportati da Neo4j. I risultati dell'analisi vengono applicati ai dati nel database Neo4j .

5

Neo4j: Non l'ho usato, ma penso che faccia tutto il calcolo di un grafico (come pagerank) su una singola macchina. Sarebbe in grado di gestire il tuo set di dati? Può dipendere dal fatto che l'intero grafico si adatti alla memoria e, in caso contrario, quanto efficientemente elabora i dati dal disco. Potrebbe colpire gli stessi problemi incontrati con Octave.

Spark GraphX: GraphX ​​partiziona i dati del grafico (vertici e spigoli) in un cluster di macchine. Questo ti dà scalabilità orizzontale e parallelismo nel calcolo. Alcune cose che potresti voler prendere in considerazione: al momento ha solo un'API di Scala (non c'è ancora Python). Funziona con PageRank, conteggio dei triangoli e componenti connessi, ma potrebbe essere necessario implementare il clustering coefficent e il diametro manualmente, utilizzando l'API grafica fornita (ad esempio, pregel). La guida di programmazione ha una lista di algoritmi supportati: https://spark.apache.org/docs/latest/graphx-programming-guide.html

9

Neo4j: Si tratta di una banca dati grafica che aiuta l'identificazione dei rapporti e dati di entità di solito dal disco. È la popolarità e la scelta è data in questo link. Ma quando ha bisogno di elaborare i set di dati molto grandi e l'elaborazione in tempo reale per produrre i risultati/la rappresentazione grafica ha bisogno di scalare orizzontalmente. In questo caso la combinazione di Neo4J con Apache Spark sarà give significant performance benefits in such a way Spark will serve as an external graph compute solution.

Mazerunner è una piattaforma di elaborazione grafica distribuita che estende Neo4J. Usa il broker dei messaggi per elaborare distribuire i processi di elaborazione del grafico al modulo Apache Spark GraphX.


Graphx:GraphX è un nuovo componente di Spark per grafici e calcolo grafico-parallelo. A un livello elevato, GraphX ​​estende lo Spark RDD introducendo una nuova astrazione del grafico: una multigrafia diretta con proprietà associate a ciascun vertice e bordo. Supporta più algoritmi Graph.

Conclusione: È sempre consigliabile utilizzare la combinazione ibrida di Neo4j con GraphX as they both easier to integrate.

Per trattamento in tempo reale e l'elaborazione di grandi insiemi di dati, utilizzare Neo4j con Graphx.
Per la semplice persistenza e per mostrare la relazione di entità per una rappresentazione grafica semplice, utilizzare neo4j standalone.

+1

cosa intendi usando "Neo4j con GraphX"? Vuoi dire usarli contemporaneamente? Come e perché? –

+1

Può essere fattibile usando il neo4j-spark-connecter che ho fornito con il link come risposta. –