21

刚刚开始我对图形处理方法和工具的探索。我们基本上所做的 - 计算一些标准指标,如 pagerank、聚类系数、三角形计数、直径、连接性等。过去对 Octave 很满意,但是当我们开始使用假设为 10^9 个节点/边的图时,我们卡住了.

因此,可能的解决方案可以是使用 Hadoop/Giraph、Spark/GraphX、Neo4j 等构建的分布式云。

但是由于我是初学者,有人可以建议实际选择什么吗?什么时候使用 Spark/GraphX 和什么时候使用 Neo4j,我没有得到区别?现在我考虑 Spark/GraphX,因为它有更多类似 Python 的语法,而 neo4j 有自己的 Cypher。neo4j 中的可视化很酷,但在如此大规模的情况下没有用。我不明白是否有理由使用额外级别的软件(neo4j)或只使用 Spark/GraphX?因为我知道 Neo4j 不会像我们使用纯 hadoop vs Giraph 或 GraphX 或 Hive 那样节省那么多时间。

谢谢你。

4

3 回答 3

23

Neo4J:它是一个图形数据库,可以帮助识别通常来自磁盘的关系和实体数据。它的受欢迎程度和选择在此链接中给出。但是当它需要处理非常大的数据集和实时处理以产生图形结果/表示时,它需要水平扩展。在这种情况下,Neo4J 与 Apache Spark 的结合将带来显着的性能优势,Spark 将用作外部图形计算解决方案。

Mazerunner是一个扩展 Neo4J 的分布式图形处理平台。它使用消息代理将图形处理作业分发到 Apache Spark GraphX 模块。


GraphX: GraphX是 Spark 中用于图形和图形并行计算的新组件。在高层次上,GraphX 通过引入一个新的 Graph 抽象来扩展 Spark RDD:一个有向多重图,其属性附加到每个顶点和边。它支持多种图形算法。

结论: 始终建议使用 Neo4j 与GraphX 的混合组合,因为它们都更容易集成。

对于实时处理和处理大型数据集,将 neo4j 与 GraphX 结合使用。
对于简单的持久性并显示简单图形显示表示的实体关系,请使用独立的 neo4j。

于 2016-09-27T16:57:38.077 回答
7

GraphX 更像是一个实时处理数据的框架,可以(并且更好)以图形形式表示。使用 GraphX,您可以使用需要大量处理能力(RAM 和 CPU)的各种算法,而使用 neo4j,您可以(可靠地)持久保存和更新这些数据。这就是我的建议。

我确信@kennybastani 在该领域做了一些非常有趣的进步,你可以看看他的mazerunner解决方案。它还以 docker 镜像的形式提供,因此您可以用一根棍子戳它,然后自己找出是否喜欢它。

此图像使用 Apache Spark 部署容器,并使用 GraphX 对从 Neo4j 导出的子图执行 ETL 图分析。分析结果被应用回 Neo4j 数据库中的数据。

于 2015-02-19T19:58:06.167 回答
7

Neo4j:我没有使用过它,但我认为它在一台机器上完成了所有的图形计算(如 pagerank)。那能处理你的数据集吗?这可能取决于您的整个图表是否适合内存,如果不适合,它处理磁盘数据的效率如何。它可能会遇到您在使用 Octave 时遇到的相同问题。

Spark GraphX:GraphX 跨机器集群划分图数据(顶点和边)。这为您提供了计算中的水平可伸缩性和并行性。您可能需要考虑一些事情:它现在只有一个 Scala API(还没有 Python)。它执行 PageRank、三角形计数和连接组件,但您可能必须使用提供的图形 API(例如 pregel)自己实现聚类系数和直径。编程指南有一个支持的算法列表:https ://spark.apache.org/docs/latest/graphx-programming-guide.html

于 2015-05-06T18:01:25.563 回答