2017-01-09 8 views
1

gremlinサーバーのリモート接続を使用して、タイタンに巨大なグラフ(約100,000頂点)を作成しようとしています。 gremlinサーバー経由でtitanへのリモート接続を作成するには、https://github.com/pluradj/titan-tp3-driver-exampleにあるサンプルコードに従っています。インデックス、頂点、エッジを作成して問題なく作成された単純なグラフを照会できます。titan-hbase-solrグラフの読み込みgremlin-server java.lang.OutOfMemoryError:GCオーバーヘッドの上限を超えました

我々は(それがリモート接続確立を使用してサーバに直接頂点と辺を作成する)発電機を使用して、巨大なグラフを作成しようとすると、しかし、我々は次のようなエラーになっています

6041316 [gremlin-server-exec-6] WARN org.apache.tinkerpop.gremlin.server.op.AbstractEvalOpProcessor - Exception processing a script on request [RequestMessage{, requestId=81f949ad-0e37-4293-bcaa-0714cb159c3b, op='eval', processor='', args={gremlin=g.V().has('idObj', 'OC97').next().addEdge('OC_LC', g.V().has('idObj', 'LC9643').next()), batchSize=64}}]. 
java.lang.OutOfMemoryError: GC overhead limit exceeded 
    at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:106) 
    at org.codehaus.groovy.reflection.CachedClass$3.initValue(CachedClass.java:84) 
    at org.codehaus.groovy.util.LazyReference.getLocked(LazyReference.java:49) 
    at org.codehaus.groovy.util.LazyReference.get(LazyReference.java:36) 
    at org.codehaus.groovy.reflection.CachedClass.getMethods(CachedClass.java:260) 
    at groovy.lang.MetaClassImpl.addInterfaceMethods(MetaClassImpl.java:419) 
    at groovy.lang.MetaClassImpl.fillMethodIndex(MetaClassImpl.java:342) 
    at groovy.lang.MetaClassImpl.initialize(MetaClassImpl.java:3264) 
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClassUnderLock(ClassInfo.java:254) 
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:285) 
    at org.codehaus.groovy.reflection.ClassInfo.getMetaClass(ClassInfo.java:295) 
    at org.codehaus.groovy.runtime.metaclass.MetaClassRegistryImpl.getMetaClass(MetaClassRegistryImpl.java:261) 
    at org.codehaus.groovy.runtime.InvokerHelper.getMetaClass(InvokerHelper.java:873) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createPojoSite(CallSiteArray.java:125) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.createCallSite(CallSiteArray.java:166) 
    at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSiteArray.java:48) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:113) 
    at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCallSite.java:133) 
    at Script72559.run(Script72559.groovy:1) 
    at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:534) 
    at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:374) 
    at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) 
    at org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines.eval(ScriptEngines.java:102) 
    at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$0(GremlinExecutor.java:258) 
    at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor$$Lambda$137/1500273035.call(Unknown Source) 
    at java.util.concurrent.FutureTask.run(FutureTask.java:266) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617) 
    at java.lang.Thread.run(Thread.java:745) 

グラフ生成を始まりが早く、徐々に減速し、上記のエラーを投げる約31000の頂点に失敗します。

我々はまた、我々は偽cache.dbキャッシュ=を設定することで、キャッシュを無効化しようとしている

cache.db-cache=true 
cache.db-cache-clean-wait=0 
cache.db-cache-time=10000 
cache.db-cache-size=0.1 

以下のようにデフォルトのキャッシュパラメータを変更しようとしています。しかし、私たちのために働いた措置はありません。

#Our environment: 
CDH 5.7.1 
Titan 1.1.0-SNAPSHOT 
Solr 4.10.3 
HBase 1.2.0 

この問題を解決する方法を教えてください。問題は、パラメータ化されたスクリプトhttp://tinkerpop.apache.org/docs/current/reference/#parameterized-scripts

グレムリンServerを使用するように忘れた

+0

1回のコミットでいくつの要素を作成しようとしていますか? 1回のショットで100Kではなく、一度に小さな数の頂点/エッジをコミットしてみてください。 –

+2

また、パラメータ化されたスクリプトを使用していることを確認してください。http://tinkerpop.apache.org/docs/current/reference/#parameterized-scripts –

+0

問題はほとんどパラメタリゼーションに関連しています。 –

答えて

2

は、それに渡されるすべてのスクリプトをキャッシュ:だけ一般的ではないスクリプトは(GV(x))を

キャッシュされるため、パラメータ化されたスクリプトを使用すると、キャッシングを削減します(私たちが行ったように)パラメータ化されたスクリプトを使用し、例えば代わり​​にString.Formatのを使用していないことは別に全てのグレムリンスクリプトをキャッシュすることは非常に高価であり、私はこれが誰かを助ける願っていOutOfMemoryErrorの

を引き起こす意味;)

関連する問題