使用Hadoop/MapReduce查找连接组件

vddsk6oq  于 2023-08-03  发布在  Hadoop
关注(0)|答案(5)|浏览(165)

我需要为一个巨大的数据集找到连接的组件。(图为无向图)
一个明显的选择是MapReduce。但是我是MapReduce的新手,我没有足够的时间来学习它并自己编写代码。
我只是想知道是否有任何现有的API相同,因为这是一个非常常见的问题,在社会网络分析?
或者至少如果有人知道任何可靠的(经过测试的)源代码,至少我可以开始自己的实现?
谢啦,谢啦

vktxenjb

vktxenjb1#

我在博客上为自己写的:
http://codingwiththomas.blogspot.de/2011/04/graph-exploration-with-hadoop-mapreduce.html
但是MapReduce并不适合进行这些Graph分析。为此,最好使用BSP(批量同步并行),Apache Hama在Hadoop HDFS之上提供了一个很好的图形API。
我在这里用MapReduce编写了一个连通分量算法:(思维搜索)
https://github.com/thomasjungblut/tjungblut-graph/tree/master/src/de/jungblut/graph/mapreduce
Apache Hama的BSP版本也可以在此处找到:
https://github.com/thomasjungblut/tjungblut-graph/blob/master/src/de/jungblut/graph/bsp/MindistSearch.java
实施起来没有MapReduce那么困难,而且速度至少快了10倍。如果您感兴趣,请在TRUNK中查看最新版本,并访问我们的邮件列表。
http://hama.apache.org/
http://apache.org/hama/mail-lists.html

kx7yvsdv

kx7yvsdv2#

我真的不知道是否有一个API可以找到强连接组件的方法。但是,我实现了BFS算法来找到从源节点到图中所有其他节点的距离(图是一个有向图,有6500万个节点)。
这个想法是在一次迭代中探索每个节点的邻居(距离为1),并将reduce的输出反馈给map,直到距离收敛。Map发出从每个节点可能的最短距离,并从列表中减少更新具有最短距离的节点。
我建议检查this outthis could help。这两个链接将为您提供有关map reduce范式中图算法的基本概念(如果您还不熟悉)。本质上,您需要扭曲算法以使用DFS而不是BFS。

tf7tbtn2

tf7tbtn23#

你可能想看看卡内基梅隆大学的Pegasus project。它们使用MapReduce提供了一个高效且优雅的实现。他们还提供了二进制文件、示例和非常详细的文档。
实现本身是基于U Kang在2009年提出的广义迭代矩阵向量乘法(GIM-V)。
PEGASUS: A Peta-Scale Graph Mining System-实施和观察U Kang,Charalampos E. Tsourakakis,Christos Faloutsos在IEEE国际数据挖掘会议(ICDM 2009)
编辑:官方实现实际上限制为21亿个节点(节点ID存储为整数)。我在github上创建了一个分支(https://github.com/placeiq/pegasus)来分享我的补丁和其他增强功能(例如:快速压缩)。

jecbmhm3

jecbmhm34#

这是一个有点老的问题,但这里有一些你想检查。我们在Spark平台上使用map-reduce实现了连通构件。
https://github.com/kwartile/connected-component

qaxu7uf2

qaxu7uf25#

尝试GraphScope中的内置WCC算法,它完全符合您的需求。
GraphScope是一个分布式图形平台,它有许多算法可以使用。
回到你的问题,它可以通过三个步骤来完成:
1.启动GraphScope集群
1.加载图表
1.在其上运行WCC并检索结果。
这是密码

import graphscope
sess = graphscope.session(num_workers=4)
graph = sess.g()
graph = graph.add_edges('/path/to/dataset')

result = graphscope.wcc(graph, src=0)
print(result.to_dataframe(selector={'id': 'v.id', 'distance': 'r'})
sess.close()

字符串
您可以参考this article来了解如何部署graphscope,以及this article来了解如何通过helm进行部署。

相关问题