JanusGraph学习笔记-问题与解决(总集)

5,113 阅读2分钟

这是一个JANUSGRAPH v0.4.0学习实践的填坑排错集锦,文末持续更新篇,欢迎收藏或一起贡献!

遇到新问题的同学可以在下方留言讨论。

E01. gremlin命令行可以查到,但在IDE中运行java程序查不到结果

问题背景:已实现在后台使用addV()添加一些顶点数据,后台控制台可以查到,但执行下面代码输出为~0。

代码示例

public static void main(String[] args) throws Exception {
        GraphTraversalSource graph = traversal()
                .withRemote(DriverRemoteConnection.using("my.host.com",8182,"g"));
      
        List<Vertex> ls = graph.V().has("name").toList();
        System.out.println("==="+graph.V().count().next());
        System.out.println("==="+graph.getGraph());
        for(Vertex v :ls){
            System.out.println("========="+v.label()+"=======");
        }
        graph.close();
}

解决方案

在gremlin控制台添加顶点数据后,在java程序中查不到,结果为空,原因是任何的图操作都会自动开启一个事务。如果事务没有提交,那么操作就不会生效。需要在gremlin控制台执行事务提交后才能查询到:

for (tx in graph.getOpenTransactions()) tx.commit()

事务提交后即可在Java程序中查询刚才添加的数据。简单来说就需要graph.tx().commit()


E02. 远程连接GremlinServer,报错源[g]别名未在服务器上配置

错误信息:The traversal source [g] for alias [g] is not configured on the server.

代码示例

同上,据称ES没有正常运行也会遇到这个错误。

解决方案

修改配置文件

vim janusgraph-hbase-es.properties

在文件末尾添加如下配置:

gremlin.graph=org.janusgraph.core.JanusGraphFactory

保存后重启GremlinServer服务器,命令如下

/path_to_janus/janusgraph-0.4.0-hadoop2/bin/gremlin-server.sh  stop  /path_to_janus/conf/janusgraph-hbase-es.properties
/path_to_janus/janusgraph-0.4.0-hadoop2/bin/gremlin-server.sh  start  /path_to_janus/conf/janusgraph-hbase-es.properties

java程序即可远程连接GremlinServer,查询数据无误。

E03. java.lang.IllegalArgumentException: Could not instantiate implementation: org.janusgraph.diskstorage.es.ElasticSearchIndex

错误信息:Caused by: java.lang.reflect.InvocationTargetException

在Gremlin命令行创建graph时报错java.lang.IllegalArgumentException: Could not instantiate implementation: org.janusgraph.diskstorage.es.ElasticSearchIndex

注:这在IDEA项目里用java代码访问JanusGraph时也会报同样的错,之前解决办法参考JanusGraph入门第一课:创建IDEA项目,但错误的原因并不一样,代码没有改动却报这个错误,这和E06很像,是同类型的错误。排查如下:

执行的代码示例

gremlin> graph = JanusGraphFactory.open('/opt/janusgraph/conf/janusgraph-hbase-es.properties')

解决方案

curl http://localhost:9200检查相应正常。但无论如何修改httpclient依赖包还是报错。经排查发现此时elasticsearch服务状态是red(因昨晚服务器全部掉电的缘故),将es的状态恢复到green之后,再次执行代码,直接就好了。随后用java代码读取数据一切正常。

可以看到:standardjanusgraph巴拉巴拉……

找了好久,总算解决了。【2019-09-15更新】

JanusGraph问题与解决系列目录:

JanusGraph问题笔记-(一)目录篇

JanusGraph问题笔记(二):SchemaViolationException

JanusGraph问题笔记(三):NoNodeException(hbase)

JanusGraph问题笔记(四):ResponseException(ES)

JanusGraph问题笔记(五):本地配置更改未生效?


相关专栏:

JanusGraph入门第一课:创建IDEA项目