【问题标题】:Issues while connecting gremlin to gremlin server将 gremlin 连接到 gremlin 服务器时出现问题
【发布时间】:2016-10-05 15:13:58
【问题描述】:

我想连接到我的 gremlin 服务器,在那里我将 gremlin-server.yaml 和 remote.yaml 提供给同一主机。我的 gremlin 在 linux 服务器上。在给出 :remote 命令时,我得到了,

gremlin> :remote connect tinkerpop.server conf/remote-objects.yaml
05:20:38 WARN  org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler  - Exception caught during WebSocket processing - closing connection
io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 400 Bad Request
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker13.verify(WebSocketClientHandshaker13.java:182)
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.finishHandshake(WebSocketClientHandshaker.java:202)
    at org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:73)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:241)
    at io.netty.handler.codec.http.HttpClientCodec$Decoder.channelInactive(HttpClientCodec.java:212)
    at io.netty.channel.CombinedChannelDuplexHandler.channelInactive(CombinedChannelDuplexHandler.java:132)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:208)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:194)
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:828)
    at io.netty.channel.AbstractChannel$AbstractUnsafe$5.run(AbstractChannel.java:576)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
    at java.lang.Thread.run(Thread.java:745)
05:20:38 ERROR org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler  - Could not process the response - correct the problem and restart the driver.
io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 400 Bad Request
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker13.verify(WebSocketClientHandshaker13.java:182)
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.finishHandshake(WebSocketClientHandshaker.java:202)
    at org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:73)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:241)
    at io.netty.handler.codec.http.HttpClientCodec$Decoder.channelInactive(HttpClientCodec.java:212)
    at io.netty.channel.CombinedChannelDuplexHandler.channelInactive(CombinedChannelDuplexHandler.java:132)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:208)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:194)
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:828)
    at io.netty.channel.AbstractChannel$AbstractUnsafe$5.run(AbstractChannel.java:576)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
    at java.lang.Thread.run(Thread.java:745)
==>Connected - ip-10-253-12-127.eu-west-1.compute.internal/10.253.12.127:8182
gremlin> 05:20:39 WARN  org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler  - Exception caught during WebSocket processing - closing connection
io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 400 Bad Request
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker13.verify(WebSocketClientHandshaker13.java:182)
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.finishHandshake(WebSocketClientHandshaker.java:202)
    at org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:73)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:241)
    at io.netty.handler.codec.http.HttpClientCodec$Decoder.channelInactive(HttpClientCodec.java:212)
    at io.netty.channel.CombinedChannelDuplexHandler.channelInactive(CombinedChannelDuplexHandler.java:132)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:208)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:194)
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:828)
    at io.netty.channel.AbstractChannel$AbstractUnsafe$5.run(AbstractChannel.java:576)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
    at java.lang.Thread.run(Thread.java:745)
05:20:39 ERROR org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler  - Could not process the response - correct the problem and restart the driver.
io.netty.handler.codec.http.websocketx.WebSocketHandshakeException: Invalid handshake response getStatus: 400 Bad Request
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker13.verify(WebSocketClientHandshaker13.java:182)
    at io.netty.handler.codec.http.websocketx.WebSocketClientHandshaker.finishHandshake(WebSocketClientHandshaker.java:202)
    at org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:73)
    at io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:103)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:308)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:294)
    at io.netty.handler.codec.ByteToMessageDecoder.channelInactive(ByteToMessageDecoder.java:241)
    at io.netty.handler.codec.http.HttpClientCodec$Decoder.channelInactive(HttpClientCodec.java:212)
    at io.netty.channel.CombinedChannelDuplexHandler.channelInactive(CombinedChannelDuplexHandler.java:132)
    at io.netty.channel.AbstractChannelHandlerContext.invokeChannelInactive(AbstractChannelHandlerContext.java:208)
    at io.netty.channel.AbstractChannelHandlerContext.fireChannelInactive(AbstractChannelHandlerContext.java:194)
    at io.netty.channel.DefaultChannelPipeline.fireChannelInactive(DefaultChannelPipeline.java:828)
    at io.netty.channel.AbstractChannel$AbstractUnsafe$5.run(AbstractChannel.java:576)
    at io.netty.util.concurrent.SingleThreadEventExecutor.runAllTasks(SingleThreadEventExecutor.java:380)
    at io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:357)
    at io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:116)
    at java.lang.Thread.run(Thread.java:745)

这一直在发生......但我只是第一次得到

 ==>Connected - ip-10-253-12-127.eu-west-1.compute.internal/10.253.12.127:8182

我不知道该怎么做.. 它连接到我在 webconsole 中获得的 gremlin-server,

{"message":"no gremlin script supplied"}

这是预期的消息。但是 ERROR 和 WARN 会无限期地运行。请帮帮我

【问题讨论】:

  • 你的 gremlin 服务器 yaml 文件中有什么?
  • host: 10.253.12.127 port: 8182 threadPoolWorker: 1 gremlinPool: 8 scriptEvaluationTimeout: 30000 serializedResponseTimeout: 30000 channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer channelizer: org.apache.tinkerpop.gremlin.server.channel.HttpChannelizer graphs: { graph: conf/titan-cassandra-es.properties} 我无法在此处上传我的整个文件内容。我只在文件的前半部分进行了更改,所以我已经显示了。
  • 您可能刚刚编辑了您的问题以包含全部内容,但我想我知道出了什么问题。我会回复的
  • 请发布您的gremlin-server.yamlremote.yaml。编辑您的原始帖子或将链接粘贴到 Gist 或 Pastebin。另外,您是否使用来自Titan Downloads 的推荐titan-1.0.0-hadoop1.zip
  • 是的,我正在使用 titan-1.0.0-hadoop1.zip。我已经开始全新安装。完成后我会上传它们

标签: gremlin


【解决方案1】:

您的 yaml 中不能有两个“channelizer”键。 Gremlin Server 实际上没有错误地启动,我有点惊讶(我猜 snakeyaml 解析器不认为那是无效的)。您可以使用 websockets 或 REST 运行 Gremlin Server,但不能同时使用两者。要连接 Gremlin 控制台和 :remote,您需要使用 WebSocketChannelizer,我怀疑 Gremlin Server 在启动时会选择 HttpChannelizer,因为您有两个。

顺便说一句,这条消息:

==>Connected - ip-10-253-12-127.eu-west-1.compute.internal/10.253.12.127:8182

实际上并不意味着“连接”。这只是意味着 :remote 已配置。在您发送第一条消息之前,实际的“连接”不会发生。该消息已在 Gremlin 控制台的最新版本中进行了更改,以减少混淆。对此感到抱歉。

请注意,我已经在 localhost 上使用默认的 Titan 1.0.0 发行版对此进行了测试。开始titan.sh:

$ bin/titan.sh start
Forking Cassandra...
Running `nodetool statusthrift`.. OK (returned exit status 0 and printed string "running").
Forking Elasticsearch...
Connecting to Elasticsearch (127.0.0.1:9300)... OK (connected to 127.0.0.1:9300).
Forking Gremlin-Server...
Connecting to Gremlin-Server (127.0.0.1:8182)... OK (connected to 127.0.0.1:8182).
Run gremlin.sh to connect.

然后开始gremlin.sh:

$ bin/gremlin.sh

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
plugin activated: aurelius.titan
plugin activated: tinkerpop.server
plugin activated: tinkerpop.utilities
plugin activated: tinkerpop.hadoop
plugin activated: tinkerpop.tinkergraph
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Connected - localhost/127.0.0.1:8182
gremlin> :> 1+1
==>2
gremlin> 

【讨论】:

  • 谢谢!!我连接了。但是当我使用:> g我得到这个错误WARN org.apache.tinkerpop.gremlin.driver.MessageSerializer-Response [PooledUnsafeDirectByteBuf(ridx:136,widx:136,cap:136)]could not be deserialized by org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0. ERROR org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler - Could not process the response - correct the problem and restart the driver.io.netty.handler.codec.DecoderException:org.apache.tinkerpop.gremlin.driver.ser.SerializationException:java.lang.IndexOutOfBoundsException: Index: 121, Size: 0
  • 在 webconsole 中我得到not a WebSocket handshake request: missing upgrade
  • 我不知道“webconsole”是什么,但如果它使用 REST,那将不再适用。发送“g”确实不应该返回错误,但取决于您使用的版本。我有这种感觉,您在 Titan 1.0.x 上使用 3.0.x,如果是这样,“g”可能不会序列化。尝试发送 g.V().next() 之类的内容以返回单个顶点,或者如果您的图形中没有数据,请执行“g.addV()”并查看返回的内容。顺便说一下,发送“g”确实不是所有这些对远程处理有用的脚本,因为您无法在客户端真正“取回”TraversalSource
  • webconsole 是这里的10.253.12.127:8182。所以,我希望图 g 的顶点和边属性显示在那里。但我得到not a WebSocket handshake request: missing upgradeg.V() 有效。但:> g.V() 无效。我得到那个错误
  • 浏览器将不再响应,因为您配置了 websockets 并且 chrome 没有尝试建立 websocket 连接。这是意料之中的。在 websocket 模式下,您只能使用 websocket 进行连接,而 Gremlin Console 使用 websockets 进行连接。
【解决方案2】:

如果您使用的是 Signature Version 4 身份验证,您应该按照https://docs.aws.amazon.com/neptune/latest/userguide/access-graph-gremlin-console.html 中描述的步骤进行操作。相反,您应该关注这个其他链接https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-connecting-gremlin-console.html。基本上,您必须构建 netty-all jar 的最后一个版本,并替换 gremlin 客户端附带的版本。

一些可以为您节省几个小时的建议:

必须使用maven和java 8编译项目;

@见How to set specific java version to Maven

alias mvn_java8="JAVA_HOME=/Library/Java/JavaVirtualMachines/adoptopenjdk-8.jdk/Contents/Home/bin/java && mvn"

编译过程中的错误

如果您像我一样在构建项目时遇到问题,请尝试更新 Lombok 版本。就我而言,这是最好的版本:

@见Caused by: java.lang.ClassNotFoundException: com.sun.tools.javac.code.TypeTags when using lombok

        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <version>1.16.22</version>
            <scope>provided</scope>
        </dependency>

特别注意环境设置。例如,SERVICE_REGION 与 AWS_REGION 或 AWS_DEFAULT_REGION 不同。您必须全部设置。

export AWS_DEFAULT_REGION=...
export AWS_REGION=...
export AWS_ACCESS_KEY_ID=...
export AWS_SECRET_ACCESS_KEY=...
export AWS_SESSION_TOKEN=...
export AWS_SECURITY_TOKEN=...
export SERVICE_REGION=...

检查您的 Neptune 遥控器

亚马逊教程假设很多东西都在 Neptune 的默认设置中。情况可能并非如此。查看您的 Neptune 设置并检查。

【讨论】:

    【解决方案3】:

    关于 AWS 示例:https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-connecting-gremlin-console.html

    我为此奋斗了一周,始终无法连接到我们的 Neptune 服务器,我以为我搞砸了 Java 部分(我不是 Java 专家,所以我花了大量时间重新编译,检查依赖项等等。)。

    但是,Python 中的类似示例(绕过 Gremlin 但也使用 Signature v4 签名)开箱即用,没有问题:

    https://docs.aws.amazon.com/neptune/latest/userguide/iam-auth-connecting-python.html

    所以我预感启动了 Wireshark,果然我发现 Python 方法实际上建立了一个 TLS 连接来交换密钥:

    ... 但 Java 示例没有。所以我做了一些探索,发现了一个名为 enableSsl 的 remote.yaml 属性,将其添加到 yaml 文件中就可以了(参见 AWS 示例中的步骤 10):

    hosts: [your-neptune-endpoint]
    port: 8182
    connectionPool: {
      enableSsl: true,
      channelizer: org.apache.tinkerpop.gremlin.driver.SigV4WebSocketChannelizer}
    serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }}
    

    成功:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-10
      • 2019-03-30
      • 1970-01-01
      • 2016-01-22
      • 1970-01-01
      相关资源
      最近更新 更多