FSixteen / janusgraph-gremlin-driver

janusgraph-gremlin
2 stars 3 forks source link

能否把配置信息完善 #2

Open ganhb opened 6 years ago

ganhb commented 6 years ago

您好, 我这边出了点异常

java.lang.RuntimeException: java.lang.RuntimeException: java.util.concurrent.TimeoutException: Timed out while waiting for an available host - check the client configuration and connectivity to the server if this message persists

    at org.apache.tinkerpop.gremlin.driver.Client.submit(Client.java:214)
    at org.apache.tinkerpop.gremlin.driver.Client.submit(Client.java:198)
    at com.xyshzh.gremlin.execute.Execute.getResults(Execute.java:47)
    at com.xyshzh.gremlin.execute.Execute.getResult(Execute.java:61)
    at com.xyshzh.gremlin.execute.Execute.getLong(Execute.java:90)
    at com.xyshzh.gremlin.test.Test.getLong(Test.java:17)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: java.lang.RuntimeException: java.util.concurrent.TimeoutException: Timed out while waiting for an available host - check the client configuration and connectivity to the server if this message persists
    at org.apache.tinkerpop.gremlin.driver.Client.submitAsync(Client.java:310)
    at org.apache.tinkerpop.gremlin.driver.Client.submitAsync(Client.java:242)
    at org.apache.tinkerpop.gremlin.driver.Client.submit(Client.java:212)
    ... 27 more
Caused by: java.util.concurrent.TimeoutException: Timed out while waiting for an available host - check the client configuration and connectivity to the server if this message persists
    at org.apache.tinkerpop.gremlin.driver.Client$ClusteredClient.chooseConnection(Client.java:499)
    at org.apache.tinkerpop.gremlin.driver.Client.submitAsync(Client.java:305)
    ... 29 more

这个明显是配置不对导致连不上,在gremlin-driver.yaml中,我只修改了hosts信息

hosts:
    - 192.168.4.80

并且在运行janusgraph中的bin/gremlin-server.sh ./conf/gremlin-server/http-gremlin-server.yaml 请问有其他的配置信息吗,十分感谢

FSixteen commented 6 years ago

你好 @ganhb : janusgraph运行时, 启的是WebSocket, 而不是Http. 你可参考一下http://docs.janusgraph.org/latest/server.html中的7.2. JanusGraph Server as a WebSocket Endpoint部分. 尝试一下, 如果不可以, 再告诉我, 我把我这的配置信息发出来.

ganhb commented 6 years ago

谢谢回答,确实是我的疏忽造成的; 我还发现一个问题,我运行测试类

Connection connection = new Connection.ClientConnection(path_, false);
Execute execute = new Execute(connection);
Long count = execute.getLong("c.V().has('age',lt(30)).count()", null);

会有如下异常:

java.util.concurrent.ExecutionException: org.apache.tinkerpop.gremlin.driver.exception.ResponseException: No such property: c for class: Script7
    at java.util.concurrent.CompletableFuture.reportGet(CompletableFuture.java:357)
    at java.util.concurrent.CompletableFuture.get(CompletableFuture.java:1895)
    at com.xyshzh.gremlin.execute.Execute.getResults(Execute.java:47)
    at com.xyshzh.gremlin.execute.Execute.getResult(Execute.java:61)
    at com.xyshzh.gremlin.execute.Execute.getLong(Execute.java:90)
    at com.xyshzh.gremlin.test.Test.getLong(Test.java:17)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
    at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)

我把它改成g就问题了,应该是可以在哪里定义这个traversal()吧; 顺便在问一个,gremlin-driver.yaml能指定表名吗,还是必须在socket下面socket-janusgraph-hbase-server.properties配置

FSixteen commented 6 years ago

你好 @ganhb :

不好意思, 到现在才回复你.

Connection connection = new Connection.ClientConnection(path_, false);
Execute execute = new Execute(connection);
String query = "c.V().has('age',lt(30)).count()";
Long count = execute.getLong(query, null);

上面这段代码是和你的代码一样的, 只是把query提取出来了, 如果没问题, 继续下面走:

在你的回复中, 在query中, 由一"c"出发, 用这个c执行的话, 报No such property: c for class: Script7, 换成由一"g"出发, 可正常运行, 是这个意思吗?

下面按照我理解的这个意思, 说一下我的思路, 你参考一下:

  1. No such property: c for class: Script7, 这个错误说明, "c"在server端是没有定义的.
  2. 换成"g"可正常, 说明server端定义的是"g", 而不是"c".

解决方式(以下内容均在${JANUSGRAPH_HOME}/目录下):

  1. 查看文件: vim ./conf/gremlin-server/gremlin-server.yaml

    host: 0.0.0.0
    port: 8182
    scriptEvaluationTimeout: 30000
    channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer
    graphs: {
    graph: conf/gremlin-server/janusgraph-cassandra-es-server.properties
    }
    plugins:
    - janusgraph.imports
    scriptEngines: {
    gremlin-groovy: {
    imports: [java.lang.Math],
    staticImports: [java.lang.Math.PI],
    scripts: [scripts/empty-sample.groovy]}}
    ......

    此文件, 是引导janusgraph server 正常运行的一下文件, channelizer决定了运行方式是http, ws. graphs决定了自己的配置文件所在位置, 也决定了取名名称(名称比较随意, 记得就好). scriptEngines->gremlin-groovy->scripts, 这个配置比较重要, 决定了是用"g" or "c" or "...". 这个配置可参考下一步. 如果想配置不同的表, 可修改为如下内容, graph1, graph2指定不同的配置文件,文件中指定不同的表:

    ......
    graphs: {
    graph1: conf/gremlin-server/janusgraph-cassandra-es-server1.properties,
    graph2: conf/gremlin-server/janusgraph-cassandra-es-server2.properties
    }
    ......
  2. 查看文件: vim ./scripts/empty-sample.groovy

    ......
    globals << [g : graph.traversal()]

    此文件, 决定了是用"g" or "c" or "..."查询内容. 上面内容中的配置的是g则用g执行, 如果如下所示, 则用c:

    ......
    globals << [c : graph.traversal()]

    如果你指定了不同的表, 由第一步配置了两个graphs的子项. 此处可以修改为:

    ......
    globals << [g : graph1.traversal()]
    globals << [c : graph2.traversal()]

    如此在driver端可以通过"g" or "c"区别查询的表.

如果通过同一组配置, 指定不同的表, 我暂时也没了解到. 如果你有所发现, 可共享一下, 谢谢.

以上内容, 希望对你有所帮助.