刚刚开始我对图形处理方法和工具的探索。我们基本上做的是-计算一些标准指标,如pagerank,聚类系数,三角形计数,直径,连通性等。在过去,我们对Octave很满意,但是当我们开始使用具有10^9个节点/边的图形时,我们就卡住了。
因此,可能的解决方案可以是分布式云,使用Hadoop/Giraph,Spark/GraphX,Neo4j等。
但既然我是一个初学者,有人能建议实际选择什么吗?我没有得到区别时使用Spark/GraphX和Neo4j时?现在我考虑Spark/GraphX,因为它有更多类似Python的语法,而neo4j有自己的Cypher。neo4j中的可视化很酷,但在如此大的范围内没有用处。我不明白是否有理由使用额外级别的软件(neo4j)或只使用Spark/GraphX?因为我知道neo4j不会像我们使用纯Hadoop与Giraph或GraphX或Hive那样保存那么多时间。
谢谢你。
4条答案
按热度按时间tkclm6bt1#
**Neo4J:**它是一个图形数据库,可以帮助识别通常来自磁盘的关系和实体数据。它的普及和选择是在这个link。但是当它需要处理非常大的数据集和真实的处理以产生图形结果/表示时,它需要水平缩放。在这种情况下,Neo4J与Apache Spark的组合将give significant performance benefits in such a way Spark will serve as an external graph compute solution.
Mazerunner是一个扩展了Neo4J的分布式图形处理平台。它使用消息代理来处理将图形处理作业分发到Apache Spark GraphX模块。
**GraphX:**GraphX是Spark中用于图和图并行计算的新组件。在高层次上,GraphX通过引入新的Graph抽象来扩展Spark RDD:每个顶点和边都有属性的有向多重图。它支持多种Graph算法。
**结论:**始终建议使用Neo4j与GraphX as they both easier to integrate.的混合组合
对于真实的处理和处理大型数据集,请将neo4j与GraphX结合使用。
对于简单的持久性和显示实体关系的简单图形显示表示使用独立的neo4j。
9njqaruj2#
Neo4j:我没有用过它,但我认为它可以在一台机器上完成所有的图形计算(如pagerank)。它能处理你的数据集吗?这可能取决于您的整个图形是否适合内存,如果不适合,它处理磁盘数据的效率如何。它可能会遇到与Octave相同的问题。
Spark GraphX:GraphX将图形数据(顶点和边)划分到一个机器集群中。这为您提供了计算中的水平可伸缩性和并行性。您可能需要考虑的一些事情:它现在只有Scala API(还没有Python)。它可以进行PageRank、三角形计数和连接组件,但您可能需要使用提供的图形API(例如pregel)自己实现聚类系数和直径。编程指南提供了支持的算法列表:https://spark.apache.org/docs/latest/graphx-programming-guide.html
gpfsuwkq3#
GraphX更像是一个实时处理数据的框架,它可以(并且更好地)以图形形式表示数据。使用GraphX,你可以使用各种需要大量处理能力(RAM和CPU)的算法,而使用neo4j,你可以(可靠地)持久化和更新这些数据。这就是我的建议。
我确信@kennybastani在这方面做了一些非常有趣的改进,你可以看看他的mazerunner解决方案。它也作为docker镜像提供,所以你可以用棍子戳它,自己看看你是否喜欢它。
此镜像使用Apache Spark部署容器,并使用GraphX对从Neo4j导出的子图执行ETL图分析。将分析结果应用回Neo4j数据库中的数据。
zazmityj4#
也许GRAPE-JDK就是您需要的图计算框架。
GRAPE-JDK是GraphScope社区提供的一款高性能、人性化的图计算Java SDK,不仅支持原生PIE计算模型,还可以无缝迁移Giraph Algo和GraphX Algo运行在GraphScope上。如果使用GRAPE-JDK编写图形算法,您的程序甚至可以实现类似于C++算法的性能。想要了解更多信息?单击此链接查看。Breaking the Language Barrier in Large Scale Graph Computing。
如果你对它的原理感兴趣,GRAPE-JDK使用FastFFI封装了C++ API,JNI的胶水代码可以自动生成。同时,LLVM 4JNI可以将LLVM编译的位码转换为Java字节码,从而提供JVM JIT的效果。
免责声明:我是GraphScope的作者。