刚开始我的图表处理方法和工具的游览。我们基本上做了什么 - 计算一些标准指标,如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一样。
谢谢。
答案 0 :(得分:16)
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。
答案 1 :(得分:6)
GraphX更像是一个实时处理框架,用于以图形形式表示的数据(并且它更好)。使用GraphX,您可以使用需要大量处理能力的各种算法(RAM和CPU),使用neo4j,您可以(可靠地)持久化并更新该数据。这就是我的建议。
我确信@kennybastani在该领域做了一些非常有趣的进步,你可以看看他的mazerunner解决方案。它也作为码头图像出货,所以你可以用棍子戳它并自己找出你喜不喜欢的颜色。
此图像使用Apache Spark部署容器并使用GraphX 对从Neo4j导出的子图执行ETL图分析。该 分析结果应用于Neo4j中的数据 数据库中。
答案 2 :(得分:6)
Neo4j:我没有使用它,但我认为它在一台机器上完成了所有图形计算(如pagerank)。这能够处理您的数据集吗?这可能取决于您的整个图表是否适合内存,如果不符合,它将如何有效地处理来自磁盘的数据。它可能会遇到与Octave相同的问题。
Spark GraphX:GraphX在一组机器上分割图形数据(顶点和边)。这为您提供了计算中的水平可伸缩性和并行性。您可能需要考虑的一些事情:它现在只有一个Scala API(还没有Python)。它执行PageRank,三角形计数和连接组件,但您可能必须使用提供的图形API(例如pregel)自己实现聚类系数和直径。编程指南有一个支持的算法列表:https://spark.apache.org/docs/latest/graphx-programming-guide.html