2012-03-26 22 views
5

我一直在玩图形来分析大数据。它工作得很好,真的很有趣,但我想知道随着数据变得越来越大,该怎么办?是否可以存储图形hbase?如果是的话,你如何建模数据库以支持图结构?

让我知道是否有任何其他解决方案,但我想尝试Hbase,因为它横向扩展,我可以让hadoop在图上运行分析(大部分代码已经用java编写),但我不确定如何在nosql数据库上构建图表?我知道每个节点都可以是数据库中的一个条目,但我不知道如何建模边和为它们添加属性(如节点名称,属性,页面排名,边缘权重等)。

看到HBase的/ Hadoop是如何大表后,建模和地图减轻我怀疑是有办法做到这一点,但不知道如何。有什么建议么?

而且,这是否有意义我想要做什么?还是有更好的大数据图解?

+0

要点 - 您可以将图形存储在Hbase中。但它不是处理链接数据的最佳解决方案。遍历将是问题容易的。如果将nodeid(src节点)用作行键,则需要使用过滤器进行基于值(属性值)的检索。更好的方法是使用支持BigData的可用图形数据库。这只是一个建议,而不是一个答案,因此我在评论块中添加了这一点。 – 2014-03-14 08:25:10

回答

6

您可以将邻接列表存储在HBase/Accumulo中面向列的时尚。我更熟悉Accumulo(HBase的术语可能会略有不同),所以你可能会使用类似的模式:

SrcNode(RowKey) EdgeType(CF):DestNode(CFQ) Edge/Node Properties(Value) 

其中CF = ColumnFamily中和CFQ = ColumnFamilyQualifier

你也可以储存节点/顶点使用像作为单独的行属性:

Node(RowKey) PropertyType(CF):PropertyValue(CFQ) PropertyValue(Value) 

的的PropertyValue可以是任一在CFQ或价值

从图形处理如@Arnon Rotem-Gal-Oz所述,您可以查看Google Pregel的实施Apache Giraph。 Pregel是Google用于大型图形处理的方法。

使用HBase的/ Accumulo输入到giraph最近已提交(7 2012年3月),作为新的功能要求Giraph:HBase/Accumulo Input and Output formats(GIRAPH-153)

2

可以在HBase的图形存储为邻接列表,以便例如,每个原始将具有一般属性(名称,的PageRank等)和相邻节点的密钥的列表的列(如果它不仅仅是一个有向图节点,你可以从这个节点或一个额外的列与每个方向)

看看apache Giraph(你也可以读一点关于它here),而这不是关于HBase它是关于处理Hadoop中的图表。 你也可能想看看Hadoop 0.23(及以上),因为YARN引擎(又名map/reduce2)对非映射/缩减算法更开放

1

我不会在路上使用HBase的“二进制书呆子“推荐它as HBase does not perform very well when handling multiple column families

最佳性能与单个列族实现(如果你经常只访问一个列族的内容和存储在另一列家庭的数据是非常大的第二个应该只用于)

+0

你不需要使用多个列系列。一个,就足够了。专门用于边缘的第二个仍然会正常运行。该建议最多两个。不过,您可以将边缘存储在单列家族下的专用列下。 – gextra 2014-03-03 13:19:38

1

有一些图形数据库可以在HBase之上构建,您可以尝试和/或学习。

Apache S2Graph 提供REST API,用于存储,查询由边缘和顶点表示的图形数据。在那里你可以找到一个演示文稿,其中解释了行/列键的构造。还分析了影响或受设计影响的运营绩效。

Titan 可以使用除HBase之外的其他存储后端,并与分析框架集成。它也设计了大数据集。

相关问题