在Hadoop中存储计算图的有效方法

时间:2010-05-10 19:22:03

标签: hadoop networking

我目前正试图在Hadoop的帮助下在巨大的图表上执行聚类系数等计算。因此,我需要一种有效的方式来存储图形,以便我可以轻松访问节点,邻居和邻居的邻居。该图非常稀疏并存储在一个巨大的制表符分隔文件中,其中第一个字段是边从第二个字段到第二个节点的节点。

提前致谢!

2 个答案:

答案 0 :(得分:1)

将图形直接存储在HDFS中的问题是您无法执行数据的随机读取。因此,要查找节点的所有邻居,您必须处理HDFS中的整个边缘列表,以查找与其连接的节点。

因此,要执行聚类系数计算,您需要将所有数据传递两次。第一次找到连接到起始节点的节点。第二次找出这些节点如何相互连接。

每当您想要在图表中显示另一个级别时,您需要处理整个图表以找到新的连接。

这是一件容易的事,是的,是的。时间有效吗?这实际上取决于您希望能够以多快的速度计算LCC以及图形的实际大小。它不会接近实时。

另一种方法是使用HBase以某种方式存储边缘,这样可以让您以并行方式随机访问节点。毕竟HBase是hadoop的一部分。

如果要以并行方式存储大型图形,可能会感兴趣的可能是FlockDB。它是Twitter最近发布的分布式图形数据库。我没有使用它,但它可能值得一看。

答案 1 :(得分:1)

如果您希望逐个用户执行此操作,HBase / Cassandra可能会起作用。将边存储在列族中:user_a_id是行键,user_b_id是列键(具有空值)。 FlockDB不太适合(他们明确地将“图形行走查询”称为非目标)

如果你想在整个图表中计算聚类系数 - 也就是说,要进行一次巨大的高效计算 - 我会使用Hadoop。有一些警告(见下文),你可以很直接地做到这一点;在infochimps,我们在具有数百万个节点+边缘的强链接twitter图上使用了Wukong

如果您的数据集具有高偏斜,那么无法从每个节点天真地进行2跳广度优先搜索。关于Twitter关注图的思考:跟随@wholefoods的170万人拥有600k的出站优势,争夺1万亿次2跳。使用强大的链接可以更容易(大大减少偏斜);否则,做一些部分聚类并迭代。