2017-07-21 3 views
1

Ich bin neu in Tinkerpop, Gremlin und Groovy. Ich habe einen Tinkerpop Gremlin Server und eine Konsole [v3.2.3] mit verifizierter Integration mit HDFS und Spark konfiguriert.Tinkerpop Gremlin-Server MissingPropertyException für SparkGraphComputer im Remote-Modus

Als nächstes versuche ich Code unter Verwendung der Gremlin-Konsole im lokalen Modus auszuführen, alles funktioniert gut, ein Funke-Job wird übermittelt und erfolgreich verarbeitet.

:load data/grateful-dead-janusgraph-schema.groovy 
graph = JanusGraphFactory.open('conf/connection.properties') 
defineGratefulDeadSchema(graph) 
graph.close() 

hdfs.copyFromLocal('data/grateful-dead.kryo','data/grateful-dead.kryo') 

graph = GraphFactory.open('conf/hadoop-graph/hadoop-load.properties') 
blvp = BulkLoaderVertexProgram.build().writeGraph('conf/connection.properties').create(graph) 
graph.compute(SparkGraphComputer).program(blvp).submit().get() 

Weiter verbinde ich Gremlin Konsole Gremlin-Server als Remote-unten-Befehl.

:remote connect tinkerpop.server conf/remote.yaml 

Danach führe ich obige Code-Präfix-Anweisungen mit ":>" aus. Sobald ich letzte Zeile vorlegen, die Verarbeitung zu SparkGraphComputer einreicht, ich unten Ausnahme auf dem Server erhalten -

[WARN] AbstractEvalOpProcessor - Exception processing a script on request [RequestMessage{, requestId=097785d6-7114-44fb-acbc-1b116dfdaac2, op='eval', processor='', args={gremlin=graph.compute(SparkGraphComputer).program(blvp).submit().get(), bindings={}, batchSize=64}}]. 
groovy.lang.MissingPropertyException: No such property: SparkGraphComputer for class: Script4 
     at org.codehaus.groovy.runtime.ScriptBytecodeAdapter.unwrap(ScriptBytecodeAdapter.java:53) 
     at org.codehaus.groovy.runtime.callsite.PogoGetPropertySite.getProperty(PogoGetPropertySite.java:52) 
     at org.codehaus.groovy.runtime.callsite.AbstractCallSite.callGroovyObjectGetProperty(AbstractCallSite.java:307) 
     at Script4.run(Script4.groovy:1) 
     at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:619) 
     at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:448) 
     at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233) 
     at org.apache.tinkerpop.gremlin.groovy.engine.ScriptEngines.eval(ScriptEngines.java:119) 
     at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$2(GremlinExecutor.java:287) 
     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) 

vermag ich nicht zu verstehen, was in groovy ist MissingPropertyException bedeutet, ist es ähnlich wie NoClassDefFound in Java?

Ich glaube, dass einige Konfiguration am Serverende fehlt, kann mir jemand helfen?

Antwort

2

Nun, es gibt zwei Möglichkeiten, dies zu tun. Sie können einfach SparkGraphComputer in das Skript, das Sie senden, importieren oder Sie können es zur scriptEngines Konfiguration für Ihren Gremlin Server hinzufügen. So etwas wie

scriptEngines: { 
    gremlin-groovy: { 
    imports: [your.full.path.to.TheClass], 
    staticImports: [your.full.path.to.TheClass.StaticVar] 
    } 
} 
+0

SparkGraphComputer ist Teil Tinkerpop Gremlin Server-Paket selbst und das Gefäß seine Definition ist auch in seiner Classpath enthalten, warum sollte es das Skript speziell angeben, benötigt werden. Es ist in der Lage, es im lokalen Modus zu lösen, was im Remote-Modus schief geht. – mbaxi

+1

Das Jar, das die Definition enthält, befindet sich im Klassenpfad, Sie haben Recht, andernfalls würde das Importieren der Klasse nicht funktionieren. Der Gremlin-Server verwendet JSR223, um auf dem jvm mit Groovy zu scripten, was bedeutet, dass es einen separaten Klassenlader zur Verfügung stellt. Wenn die JSR223 ScriptEngine 'exec' aufruft, um das Skript zu kompilieren und auszuführen, müssen die Klassen, die Sie verwenden, über den Scripting Engine Classloader geladen werden, was die Importe erforderlich macht. Interaktiver (lokaler) Modus in TinkerPop lädt mehrere Plugins, von denen ich glaube, dass die meisten dieser Klasse Dinge importieren, um die Ausführung von Beispielen zu vereinfachen. Ich hoffe, das hilft. – pantalohnes

+0

Danke @pantalohnes, das ist wirklich hilfreich, ich habe Ihren Vorschlag ausprobiert und MissPropertyException überstanden, aber endete in einer anderen Ausnahme -> java.lang.IllegalArgumentException: Graph unterstützt den mitgelieferten Graph Computer nicht: SparkGraphComputer, lassen Sie mich mehr darüber erfahren und zurück – mbaxi

Verwandte Themen