Apache spark 从Titan(在HBase上)读入Spark的大型图表

Apache spark 从Titan(在HBase上)读入Spark的大型图表,apache-spark,graph,hbase,titan,Apache Spark,Graph,Hbase,Titan,我正在研究Titan(在HBase上)作为大型分布式图形数据库的候选。我们需要OLTP访问(通过图形的快速多跳查询)和OLAP访问(将图形的全部或至少大部分加载到Spark中进行分析) 据我所知,我可以使用Gremlin服务器处理结果集较小的OLTP样式的查询。因为我的查询将由UI生成,所以我可以使用API与Gremlin服务器进行接口。到目前为止,一切顺利 问题涉及OLAP用例。由于HBase中的数据将与Spark执行器位于同一位置,因此使用HDFSInputFormat将数据读入Spark将

我正在研究Titan(在HBase上)作为大型分布式图形数据库的候选。我们需要OLTP访问(通过图形的快速多跳查询)和OLAP访问(将图形的全部或至少大部分加载到Spark中进行分析)

据我所知,我可以使用Gremlin服务器处理结果集较小的OLTP样式的查询。因为我的查询将由UI生成,所以我可以使用API与Gremlin服务器进行接口。到目前为止,一切顺利

问题涉及OLAP用例。由于HBase中的数据将与Spark执行器位于同一位置,因此使用
HDFSInputFormat
将数据读入Spark将非常有效。从驱动程序执行Gremlin查询,然后将数据分发回执行者,这将是低效的(事实上,考虑到投影的图形大小,这是不可能的)

我找到的最好的指导是Titan GitHub repo()的一个未结束的讨论,它建议(至少对于Cassandra后端而言)标准
Titan CassandrainPutFormat
应该适用于读取Titan表。没有关于HBase后端的任何声明

然而,在阅读了底层Titan数据模型()之后,似乎“原始”图形数据的部分被序列化,没有解释如何从内容重构属性图

因此,我有两个问题:

1) 我上面所说的一切是正确的,还是我遗漏了/误解了什么


2) 有没有人能从HBase中读取一个“原始”Titan图,并在Spark中重建它(在GraphX中或作为数据帧、RDD等)?如果是这样的话,你能给我一些建议吗?

大约一年前,我遇到了与你描述的相同的挑战——我们有一个非常大的Titan实例,但我们无法在其上运行任何OLAP进程

我对这个问题进行了深入的研究,但我发现的任何解决方案(
SparkGraphComputer
TitanHBaseInputFormat
)要么速度非常慢(在我们的规模中可能是几天或几周),要么就是有问题和数据丢失。速度慢的主要原因是他们都使用了HBase主API,这成为了速度瓶颈

所以我实现了——它是HBase上Titan的Spark RDD,绕过HBase主API,解析HBase(称为HFiles)

我已经在一个相当大的规模上进行了测试——一个包含数千亿元素的泰坦图,重约25TB


因为它不依赖HBase公开的扫描API,所以速度要快得多。例如,在我提到的图中计算边大约需要10个小时。

嗨,Titan(cassandra)也有类似的解决方案吗?我不知道,但你可以开始制作…)