使用Hadoop / MapReduce查找连接的组件

时间:2012-05-20 21:30:51

标签: graph hadoop mapreduce social-networking graph-algorithm

我需要为庞大的数据集找到连接的组件。 (图表未指向)

一个明显的选择是MapReduce。但我是MapReduce的新手,我很安静,没时间去接你并自己编码。

我只是想知道是否有相同的现有API,因为它是社交网络分析中一个非常常见的问题?

或者至少如果有人知道任何可靠(经过试验和测试)的来源,至少我可以自己开始实施这个来源吗?

由于

4 个答案:

答案 0 :(得分:8)

我为自己写了博客:

http://codingwiththomas.blogspot.de/2011/04/graph-exploration-with-hadoop-mapreduce.html

但MapReduce不适合这些Graph分析。更好地使用BSP(批量同步并行),Apache Hama在Hadoop HDFS之上提供了一个很好的图形API。

我在这里用MapReduce写了一个连通分量算法:( Mindist搜索)

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

答案 1 :(得分:3)

我真的不知道API是否可用,它具有查找强连接组件的方法。但是,我实现了BFS算法来查找从源节点到图中所有其他节点的距离(该图是一个有6500万个节点的有向图)。

我们的想法是在一次迭代中探索每个节点的邻居(距离为1),并将reduce的输出反馈回地图,直到距离收敛为止。地图从每个节点发出可能的最短距离,并减少更新距离列表最短距离的节点。

我建议查看this out。另外,this could help。这两个链接将为您提供有关map reduce算法中图形算法的基本概念(如果您已经不熟悉)。实质上,您需要扭曲算法以使用DFS而不是BFS。

答案 2 :(得分:2)

您可以查看卡内基梅隆大学的Pegasus project。它们使用MapReduce提供高效且优雅的实现。他们还提供二进制文件,样本和非常详细的文档。

实现本身基于U Kang在2009年提出的广义迭代矩阵 - 向量乘法(GIM-V)。

  

PEGASUS: A Peta-Scale Graph Mining System - 实施和   观察U Kang,Charalampos E. Tsourakakis,Christos Faloutsos In   IEEE国际数据挖掘大会(ICDM 2009)

编辑: 官方实现实际上限于2.1亿个节点(节点id存储为整数)。我正在github上创建一个fork(https://github.com/placeiq/pegasus)来共享我的补丁和其他增强功能(例如Snappy压缩)。

答案 3 :(得分:1)

这是一个有点老问题,但这里有你要结账的东西。我们在Spark平台上使用map-reduce实现了连接组件。

https://github.com/kwartile/connected-component