如何从本地gremlin-console将graphml文件加载到Janusgraph的远程实例中

问题描述

如何从本地gremlin-console将graphml文件加载到Janusgraph的远程实例中

最终,我想在远程VM上创建JanusGraph,但为此PoT,我使用以下命令创建了本地docker映像

docker run --rm --name janusgraph-default janusgraph/janusgraph:latest

哪个工作正常。然后,我使用以下命令启动gremlin-console:

docker run --rm --link janusgraph-default:janusgraph -e GREMLIN_REMOTE_HOSTS=janusgraph \ -it janusgraph/janusgraph:latest ./bin/gremlin.sh

这也可以。我在格莱姆林控制台上跑了

:remote connect tinkerpop.server conf/remote.yaml

然后

:> g.addV('person').property('name','chris')

为了测试它是否有效,我跑了 :> g.V().values('name')返回了chris

(我认为)证明了gremlin-console可以控制docker映像中的gremlin-server,我想导入K LaWrence的air-routes-latest.graphml,以尝试在Node.js中创建一些CRUD操作

我能找到的所有文档仅处理本地导入,而不处理远程

我尝试过:

:> graph.io(graphml()).readGraph("/home/me/Downloads/air-routes.graphml"),返回了

/home/me/Downloads/air-routes.graphml (No such file or directory)

堆栈跟踪:

display stack trace? [yN]y
java.io.FileNotFoundException: /home/greg/Downloads/air-routes.graphml (No such file or directory)
        at java.io.FileInputStream.open0(Native Method)
        at java.io.FileInputStream.open(FileInputStream.java:195)
        at java.io.FileInputStream.<init>(FileInputStream.java:138)
        at java.io.FileInputStream.<init>(FileInputStream.java:93)
        at org.apache.tinkerpop.gremlin.structure.io.graphml.GraphMLIo.readGraph(GraphMLIo.java:91)
        at org.apache.tinkerpop.gremlin.structure.io.Io$readGraph.call(UnkNown Source)
        at Script5.run(Script5.groovy:1)
        at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:674)
        at org.apache.tinkerpop.gremlin.groovy.jsr223.GremlinGroovyScriptEngine.eval(GremlinGroovyScriptEngine.java:376)
        at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:233)
        at org.apache.tinkerpop.gremlin.groovy.engine.GremlinExecutor.lambda$eval$0(GremlinExecutor.java:266)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
        at java.util.concurrent.FutureTask.run(FutureTask.java:266)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
        at java.lang.Thread.run(Thread.java:748)

我有信心这就是它的真实位置(与控制台在同一台计算机上),但是这让我想知道导入是否具有远程服务器的上下文(在这种情况下为docker映像,但可能是远程VM)或本地控制台?我找不到任何帮助可以照亮该帮助吗?

 Gremlin.version()
==>3.4.4

gremlin-console janusgraph tinkerpop gremlin

解决方法

目前,Gremlin io()不能以此方式工作。在评估您的io()步骤时,它将使用执行该文件的本地文件系统来执行其工作。在您的情况下,您有一个在同一系统上运行的docker容器,因此从技术上讲,您可以按照我的要求执行操作,但是我认为该Docker容器需要配置为以这种方式挂载/home/greg/Downloads/它将可供使用。否则,Docker将被隔离到其自己的文件空间中。我认为您需要Docker volumebind mount才能使其正常工作。

,

在斯蒂芬的回应之后,我尝试了以下有效的方法:

设置Janusgraph服务器以导入air-routes.graphml

bash终端1(su):

docker run --name janusgraph-default --volume /home/greg/Downloads/gremlin:/dataImports janusgraph/janusgraph:latest

((如有必要,请使用docker container stop <pid>删除一个冲突的容器)

这会将本地文件夹/home/greg/Downloads/gremlin安装为图像中的/dataImports,因此可以导入air-routes.graphml文件(您需要从此链接下载并替换自己的本地文件下载路径) 这是一个有用的graphml数据集。仔细阅读herehere

要运行导入,请打开一个新的bash终端2(su):

docker run --rm --link janusgraph-default:janusgraph -e GREMLIN_REMOTE_HOSTS=janusgraph -it janusgraph/janusgraph:latest ./bin/gremlin.sh

这将链接到janusgraph服务器(无需端口绑定)并打开gremlin-console。

在控制台上,运行:

:remote connect tinkerpop.server conf/remote.yaml

然后使用以下命令导入graphml文件

:> graph.io(graphml()).readGraph("/dataImports/air-routes.graphml")

它应该返回null。完成后,运行查询,如:

:> g.V().has('airport','code','DFW').values()