远程模式下 SparkGraphComputer 的 Tinkerpop Gremlin 服务器 MissingPropertyException
Tinkerpop Gremlin server MissingPropertyException for SparkGraphComputer in remote mode
我是 tinkerpop、gremlin 和 groovy 的新手。
我已经配置了 Tinkerpop Gremlin 服务器和控制台 [v3.2.3],并验证了与 HDFS 和 Spark 的集成。
接下来我尝试在本地模式下使用 gremlin 控制台执行以下代码,一切正常,提交并成功处理了 spark 作业。
: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()
接下来,我使用以下命令将 gremlin 控制台远程连接到 gremlin 服务器。
:remote connect tinkerpop.server conf/remote.yaml
在此之后,我执行上面带有“:>”前缀语句的代码。一旦我提交了正在向 SparkGraphComputer 提交处理的最后一行,我就在服务器上遇到以下异常 -
[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(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)
我无法理解groovy中的MissingPropertyException是什么意思,它类似于java中的NoClassDefFound吗?
我认为服务器端缺少某些配置,有人可以帮助我吗?
好吧,有两种方法可以解决这个问题。您可以简单地在您发送的脚本中导入 SparkGraphComputer
或者您可以将它添加到您的 gremlin 服务器的 scriptEngines
配置中。像
scriptEngines: {
gremlin-groovy: {
imports: [your.full.path.to.TheClass],
staticImports: [your.full.path.to.TheClass.StaticVar]
}
}
我是 tinkerpop、gremlin 和 groovy 的新手。 我已经配置了 Tinkerpop Gremlin 服务器和控制台 [v3.2.3],并验证了与 HDFS 和 Spark 的集成。
接下来我尝试在本地模式下使用 gremlin 控制台执行以下代码,一切正常,提交并成功处理了 spark 作业。
: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()
接下来,我使用以下命令将 gremlin 控制台远程连接到 gremlin 服务器。
:remote connect tinkerpop.server conf/remote.yaml
在此之后,我执行上面带有“:>”前缀语句的代码。一旦我提交了正在向 SparkGraphComputer 提交处理的最后一行,我就在服务器上遇到以下异常 -
[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(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)
我无法理解groovy中的MissingPropertyException是什么意思,它类似于java中的NoClassDefFound吗?
我认为服务器端缺少某些配置,有人可以帮助我吗?
好吧,有两种方法可以解决这个问题。您可以简单地在您发送的脚本中导入 SparkGraphComputer
或者您可以将它添加到您的 gremlin 服务器的 scriptEngines
配置中。像
scriptEngines: {
gremlin-groovy: {
imports: [your.full.path.to.TheClass],
staticImports: [your.full.path.to.TheClass.StaticVar]
}
}