Performance Janusgraph(GremlinServer)导入可提高性能

Performance Janusgraph(GremlinServer)导入可提高性能,performance,import,cassandra,janusgraph,gremlin-server,Performance,Import,Cassandra,Janusgraph,Gremlin Server,我正在尝试导入1GB的图形数据(由~100k个顶点、360万条边组成),这是gryo格式。我试图通过gremlin客户端导入,但出现以下错误: 小精灵> graph.io(IoCore.gryo()).readGraph('janusgraph\u dump\u 2020\u 09\u 30\u local.gryo')) 超出了GC开销限制类型:help或:h以获取帮助。展示 堆栈跟踪?[yN]y java.lang.OutOfMemoryError:GC开销限制 超过 org.cliffc.

我正在尝试导入1GB的图形数据(由~100k个顶点、360万条边组成),这是gryo格式。我试图通过gremlin客户端导入,但出现以下错误:

小精灵> graph.io(IoCore.gryo()).readGraph('janusgraph\u dump\u 2020\u 09\u 30\u local.gryo')) 超出了GC开销限制类型:help或:h以获取帮助。展示 堆栈跟踪?[yN]y java.lang.OutOfMemoryError:GC开销限制 超过 org.cliffc.high_scale_lib.NonBlockingHashMapLong$CHM.(NonBlockingHashMapLong.java:471) 在 org.cliffc.high_scale_lib.NonBlockingHashMapLong.initialize(NonBlockingHashMapLong.java:241)

Gremlin服务器,Cassandra详细信息如下:

小精灵服务器:

Janusgraph版本:0.5.2 小精灵版本:3.4.6

Heap: JAVA_OPTIONS="-Xms4G -Xmx4G …
// gremlin conf
threadPoolWorker: 8
gremlinPool: 16
scriptEvaluationTimeout: 90000
// cql props
query.batch=true
Cassandra位于具有3个节点的集群中

卡桑德拉版本:3.11.0

节点1:RAM:8GB,Cassandra堆:1GB(-Xms1G-Xmx1G)
节点2:RAM:8GB,Cassandra堆:4GB(-Xms4G-Xmx4G)
节点3:RAM:8GB,Cassandra堆:4GB(-Xms4G-Xmx4G)

每个节点都安装了Gremlin服务器(客户端负载平衡器)。但是我们正在Node1中执行gremlin查询

有人能在以下方面帮助我吗

导入(任何配置更改)需要做什么?

>>将海量数据导出/导入Janusgraph(Gremlin服务器)的最佳方式是什么?(我需要答案)

有什么方法可以分块导出数据并分块导入吗?

提前谢谢

编辑:

我已经将Node1,Gremlin服务器堆增加到2GB。导入查询响应已取消。也许,对于Gremlin和Cassandra来说,RAM分配是不够的。这就是为什么我将其保持在1GB,以便执行查询

考虑到巨大的数据量(数十亿个顶点/边),这是非常少的,希望8GB RAM和2/4内核对于集群中的每个节点都足够。

Graph.io()
和现在首选的Gremlin步骤
io()
使用
GryoReader
读取文件(除非图形提供程序覆盖后一个Gremlin
io())
step,我认为JansuGraph不会)。因此,如果使用
GryoReader
,通常会需要大量内存(比您预期的要多),因为它会缓存所有顶点以加快加载速度。最终,它在加载方面并不是非常有效,TinkerPop认为,提供商在遇到
io()
步骤时,会通过拦截
io()
来优化自己的本地批量加载程序的加载。如果没有这种优化,一般建议使用直接使用的图的批量加载工具。对于JanusGraph,这可能意味着将加载作为脚本的一部分进行并行化,或者使用Gremlin OLAP加载方法。一些建议可以在以及这些博客帖子中找到:

还可以考虑自定义<代码> VistoDeals/Cuff>以进行大容量加载。TinkerPop有一个更通用的继承者(现在在最新版本中已弃用/删除),它在JanusGraph中颇受欢迎,因为它是TinkerPop放弃提供此类功能之前的通用批量加载工具


在几百万条边的规模下,我可能会编写一个小的groovy脚本,在Gremlin控制台中运行,直接将数据加载到图形中,避免先尝试使用Gryo这样的中间格式。它可能会运行得更快,并且可以避免您对JanusGraph的批量加载策略进行过多的研究。如果您选择这种情况,那么我上面提供的JanusGraph文档的链接应该对您有很大帮助。您可以不用担心使用OLAP、Spark和其他选项,直到有数亿条边(或更多)要加载。

增加堆。。。至少3GbI已增加到2GB,然后查询被取消(响应)。我忘了提了。Cassandra真的不适合在这么低的堆环境中运行。。。您还可以为低堆大小tun JVM GC…我还配置了这样一种方式,gremlin将只连接到另外两个具有4GB堆但没有用处的Cassandra,Janus将使用集群中的所有Cassandra节点,因为您配置的是初始接触点。。。