【问题标题】:Tinkerpop Gremlin server MissingPropertyException for SparkGraphComputer in remote mode远程模式下 SparkGraphComputer 的 Tinkerpop Gremlin 服务器 MissingPropertyException
【发布时间】:2017-12-27 14:17:47
【问题描述】:

我是 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$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)

我无法理解 groovy 中的 MissingPropertyException 是什么意思,它类似于 java 中的 NoClassDefFound 吗?

我认为服务器端缺少某些配置,有人可以帮助我吗?

【问题讨论】:

    标签: groovy titan tinkerpop3 janusgraph


    【解决方案1】:

    嗯,有两种方法可以解决这个问题。您可以在发送的脚本中简单地导入SparkGraphComputer,也可以将其添加到gremlin 服务器的scriptEngines 配置中。类似的东西

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

    【讨论】:

    • SparkGraphComputer 是 Tinkerpop Gremlin Server 包本身的一部分,包含其定义的 jar 也在其类路径中,为什么需要专门指定脚本。本地模式下可以解决,远程模式下有什么问题?
    • 包含定义的jar在类路径中,你是对的,否则导入类将不起作用。 gremlin 服务器利用 JSR223 在带有 Groovy 的 jvm 上编写脚本,这意味着它提供了一个单独的类加载器。当 JSR223 ScriptEngine 调用exec 编译和运行脚本时,您正在使用的类需要通过脚本引擎类加载器加载,因此需要导入。 TinkerPop 中的交互(本地)模式加载了几个插件,我相信这些插件会为您完成大部分此类导入内容,以便更轻松地运行示例。希望对您有所帮助。
    • 感谢@pantalohnes,这真的很有帮助,我尝试了您的建议并通过了 MissingPropertyException,但最终陷入了另一个异常 -> java.lang.IllegalArgumentException:Graph 不支持提供的图形计算机:SparkGraphComputer ,让我深入研究一下并返回
    • 感谢@pantalohnes,这对我们很有帮助
    猜你喜欢
    • 1970-01-01
    • 2018-01-01
    • 2019-03-30
    • 1970-01-01
    • 2017-11-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多