【问题标题】:Janus Graph HBase and Solr Unknown external index backend: jgexJanus Graph HBase 和 Solr 未知外部索引后端:jgex
【发布时间】:2018-05-15 07:59:26
【问题描述】:

我使用 JanusGraph 0.2.0、Hbase 1.2.6 和 Solr 7.3.0。我想使用 Hbase(存储后端)和 Solr(索引后端)运行独立的 Janus Graph 服务器。然后连接 gremlin 驱动程序(使用 Java 客户端)并使用 Gremlin 查询语言来遍历我的图。我在本地安装了 Hbase 和 Solr。 我关注了:

https://github.com/JanusGraph/janusgraph/tree/master/janusgraph-examples/example-remotegraph 

使用 janusgraph-hbase-solr.properties 更新了 gremlin-server.yaml。 我成功启动了 Gremlin 服务器。我用

创建了核心 jgex

solr create_core -d $JANUSGRAPH_HOME/conf/solr -c jgex

还有 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-hbase-solr.properties
}
plugins:
  - janusgraph.imports
scriptEngines: {
  gremlin-groovy: {
    imports: [java.lang.Math],
    staticImports: [java.lang.Math.PI],
    scripts: [scripts/empty-sample.groovy]}}
serializers:
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: {ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}
processors:
  - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
  - { className: org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor, config: { cacheExpirationTime: 600000, cacheMaxSize: 1000 }}
metrics: {
  consoleReporter: {enabled: true, interval: 180000},
  csvReporter: {enabled: true, interval: 180000, fileName: /tmp/gremlin-server-metrics.csv},
  jmxReporter: {enabled: true},
  slf4jReporter: {enabled: true, interval: 180000},
  gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
  graphiteReporter: {enabled: false, interval: 180000}}
maxInitialLineLength: 4096
maxHeaderSize: 8192
maxChunkSize: 8192
maxContentLength: 65536
maxAccumulationBufferComponents: 1024
resultIterationBatchSize: 64
writeBufferLowWaterMark: 32768
writeBufferHighWaterMark: 65536

并且 janusgraph-hbase-solr.properties 这样的:(其他字段默认注释行)

storage.backend=hbase
storage.hostname=127.0.0.1
cache.db-cache = true
cache.db-cache-clean-wait = 20
cache.db-cache-time = 180000
cache.db-cache-size = 0.5
index.search.backend=solr
index.search.solr.mode=http
index.search.solr.http-urls=http://localhost:8983/solr
gremlin.graph=org.janusgraph.core.JanusGraphFactory

当我跑步时

mvn exec:java -pl :example-remotegraph

它抛出的命令

原因:org.apache.tinkerpop.gremlin.driver.exception.ResponseException:未知的外部索引后端:jgex 在 org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler.channelRead0(Handler.java:244) 在 org.apache.tinkerpop.gremlin.driver.Handler$GremlinResponseHandler.channelRead0(Handler.java:195) 在 io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 org.apache.tinkerpop.gremlin.driver.Handler$GremlinSaslAuthenticationHandler.channelRead0(Handler.java:123) 在 org.apache.tinkerpop.gremlin.driver.Handler$GremlinSaslAuthenticationHandler.channelRead0(Handler.java:67) 在 io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 io.netty.handler.codec.MessageToMessageDecoder.channelRead(MessageToMessageDecoder.java:102) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 org.apache.tinkerpop.gremlin.driver.handler.WebSocketClientHandler.channelRead0(WebSocketClientHandler.java:91) 在 io.netty.channel.SimpleChannelInboundHandler.channelRead(SimpleChannelInboundHandler.java:105) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 io.netty.handler.codec.ByteToMessageDecoder.fireChannelRead(ByteToMessageDecoder.java:312) 在 io.netty.handler.codec.ByteToMessageDecoder.channelRead(ByteToMessageDecoder.java:286) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.AbstractChannelHandlerContext.fireChannelRead(AbstractChannelHandlerContext.java:335) 在 io.netty.channel.DefaultChannelPipeline$HeadContext.channelRead(DefaultChannelPipeline.java:1302) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:356) 在 io.netty.channel.AbstractChannelHandlerContext.invokeChannelRead(AbstractChannelHandlerContext.java:342) 在 io.netty.channel.DefaultChannelPipeline.fireChannelRead(DefaultChannelPipeline.java:919) 在 io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:131) 在 io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:646) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized (NioEventLoop.java:581) 在 io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:498) 在 io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:460) 在 io.netty.util.concurrent.SingleThreadEventExecutor$2.run(SingleThreadEventExecutor.java:131) ... 1 更多

提前致谢。

【问题讨论】:

  • 您能否编辑您的问题并添加gremlin-server.yaml 以及其中引用的图形属性?
  • 嗨@JasonPlurad,我在问题帖子中添加了 gremlin-server.yaml 和 janusgraph-hbase-solr.properties。
  • 我更新了答案

标签: solr gremlin janusgraph gremlin-server janus


【解决方案1】:

听起来您可能使用了错误的属性文件。此属性文件jgex-hbase-solr-http.properties,位于$JANUSGRAPH_HOME/examples/example-hbase/conf/ 下的分布中,包含jgex 的索引定义:

index.jgex.backend=solr
index.jgex.index-name=jgex
index.jgex.hostname=127.0.0.1

index.jgex.solr.mode=http
index.jgex.solr.http-urls=http://127.0.0.1:8983/solr

如果您使用 Solr Cloud 而不是 Solr HTTP,请使用同一目录中的 jgex-hbase-solr-cloud.properties。

更新:根据您问题中的属性文件,请注意它定义了一个名为 search 的 Solr 索引(遵循模式 index.[X].backend),这与示例目录中的内容不同,并且在我的答案中显示,使用jgex

JanusGraph 的索引选项以字符串“index.[X]”开头。其中“[X]”是用户定义的后端名称。在构建混合索引时,必须将此用户定义的名称传递给 JanusGraph 的 ManagementSystem 接口,如第 9.1.2 节“混合索引”中所述,以便 JanusGraph 知道要使用可能使用的多个已配置索引后端中的哪一个。本章中的配置 sn-ps 使用名称搜索,而关于选项的散文讨论通常在相同位置写 [X]。只要在 JanusGraph 的配置和管理索引时一致使用,确切的索引名称并不重要。

【讨论】:

  • 感谢您的评论。我可以运行 example-hbase,我在 Solr 中看到了 hbase 表和索引数据。顺便说一句,我使用 Solr http。但我尝试运行 example-remotegraph。我也没有在与 hbase 和 solr 相关的示例远程图中找到任何配置。我想运行独立的 Janus Graph 服务器(带有 Hbase 和 Solr),然后从客户端发送 gremlinql 命令作为字符串。 (可以通过 Java 或非 JVM 语言发送)
  • 嗨,我像你说的那样编辑了 janusgraph-hbase-solr.properties。我在控制台输出中看到了配置索引 [jgex]。一切都好。但现在它寻找一个弹性搜索实例并抛出 org.janusgraph.diskstorage.es.rest.RestElasticSearchClient - 无法确定 Elasticsearch 服务器版本。默认为五个。 java.net.ConnectException:连接被拒绝
  • 您的属性中没有设置storage.hbase.table,因此它使用默认表名janusgraph。必须有一个使用默认表名创建的先前图形实例,并且它是使用 Elasticsearch 配置的。删除janusgraph 表或为storage.hbase.table 设置不同的值。
猜你喜欢
  • 1970-01-01
  • 2017-03-01
  • 2013-04-01
  • 2016-07-02
  • 1970-01-01
  • 1970-01-01
  • 2014-11-20
  • 2015-08-03
  • 2014-06-01
相关资源
最近更新 更多