2015-02-19 10 views
11

Właśnie rozpocząłem moją wycieczkę do metod i narzędzi do przetwarzania wykresów. Co właściwie robimy - policzmy standardowe wskaźniki, takie jak PageRank, współczynnik skupień, liczba trójkątów, średnica, łączność itd. W przeszłości był zadowolony z Octave, ale kiedy zaczęliśmy pracować z wykresami mając na przykład 10^9 węzłów/krawędzi utknęliśmy .Neo4j lub GraphX ​​/ Giraph co wybrać?

więc możliwe rozwiązania mogą być rozpowszechniane chmura wykonana z Hadoop/Giraph, Spark/GraphX, Neo4j na nich itp

Ale ponieważ jestem początkującym, może ktoś doradzić co właściwie wybrać? Nie miałem różnicy kiedy używać Spark/GraphX ​​i kiedy Neo4j? W tej chwili uważam Spark/GraphX, ponieważ ma on więcej składni podobnych do Pythona, podczas gdy neo4j ma własny Cypher. Wizualizacja w neo4j jest fajna, ale nieprzydatna na tak dużą skalę. Nie rozumiem, czy istnieje powód, aby używać dodatkowego poziomu oprogramowania (neo4j) lub po prostu używać Spark/GraphX? Ponieważ zrozumiałem, że neo4j nie oszczędza tak dużo czasu, jak gdybyśmy pracowali z czystym hadoopem w porównaniu z Giraph lub GraphX ​​lub Hive.

Dziękuję.

Odpowiedz

5

GraphX ​​to bardziej struktura przetwarzania danych w czasie rzeczywistym dla danych, które mogą być (i jest to lepsze, gdy) reprezentowane w formie wykresu. Z GraphX ​​możesz korzystać z różnych algorytmów, które wymagają dużej ilości mocy obliczeniowej (zarówno pamięci RAM, jak i procesora), a dzięki neo4j możesz (niezawodnie) utrzymywać i aktualizować te dane. Oto, co bym zasugerował.

Wiem na pewno, że @kennybastani zrobił kilka interesujących postępów w tej dziedzinie, możesz rzucić okiem na jego rozwiązanie mazerunner. Jest również dostarczany jako obraz dokowany, więc możesz go szturchnąć patykiem i przekonać się, czy ci się to podoba, czy nie.

Obraz ten wykorzystuje pojemnik z Apache Spark wykorzystuje GraphX ​​do przeprowadzić analizę wykresu ETL na subgraphs eksportowanych z Neo4j. Wyniki analizy są ponownie stosowane do danych w bazie danych Neo4j .

5

Neo4j: Nie użyłem go, ale myślę, że wykonuje wszystkie obliczenia graficzne (np. PageRank) na jednym komputerze. Czy byłby w stanie obsłużyć twój zestaw danych? Może zależeć od tego, czy cały wykres mieści się w pamięci, a jeśli nie, w jaki sposób przetwarza dane z dysku. Może to dotknąć tych samych problemów, które napotkałeś w Octave.

Spark GraphX: GraphX ​​dzieli dane wykresu (wierzchołki i krawędzie) na grupę komputerów. Daje to poziomą skalowalność i równoległość w obliczeniach. Niektóre rzeczy, które możesz chcieć rozważyć: to ma tylko Scala API teraz (żaden Python jeszcze). Robi to PageRank, liczbę trójkątów i połączone komponenty, ale możesz potrzebować zaimplementować współczynnik klastra i średnicę sam, używając dostarczonego API wykresu (np. Pregel). Przewodnik programowania zawiera listę obsługiwanych algorytmów: https://spark.apache.org/docs/latest/graphx-programming-guide.html

9

Neo4J: Jest to graficzna baza danych, która pomaga w identyfikacji danych dotyczących relacji i jednostek z dysku. To popularność i wybór jest podany w tym link. Ale kiedy musi przetwarzać bardzo duże zestawy danych i przetwarzanie w czasie rzeczywistym, aby uzyskać graficzne wyniki/reprezentację, musi skalować w poziomie. W tym przypadku kombinacja Neo4J z Apache Spark będzie give significant performance benefits in such a way Spark will serve as an external graph compute solution.

Mazerunner jest rozproszoną platformą przetwarzania wykresów, która rozszerza Neo4J. Wykorzystuje broker komunikatów do przetwarzania dystrybucji zadań przetwarzania wykresów do modułu Apache Spark GraphX.


GraphX:GraphX jest nowym elementem iskrę wykresów i obliczeń wykres równoległe. Na wysokim poziomie GraphX ​​rozszerza Spark RDD, wprowadzając nową abstrakcję Graph: ukierunkowany multigraph z właściwościami dołączonymi do każdego wierzchołka i krawędzi. Obsługuje wiele algorytmów Graph.

Wniosek: To jest zawsze zaleca się stosowanie kombinacji Neo4j Hybrid z GraphX as they both easier to integrate.

Dla przetwarzania w czasie rzeczywistym i przetwarzania dużych zestawów danych, należy użyć neo4j z GraphX.
Aby uzyskać proste utrwalenie i pokazać związek encji dla prostej graficznej reprezentacji wyświetlania, użyj autonomicznego neo4j.

+1

co masz na myśli, używając "Neo4j z GraphX"? Czy chcesz używać ich jednocześnie? Jak i dlaczego? –

+1

Może być wykonalne za pomocą łącznika iskrowego neo4j, który dostarczyłem linku jako odpowiedź. –

Powiązane problemy