如何从本地 gremlin 控制台将 graphml 文件加载到 Janusgraph 的远程实例中
How to load a graphml file into a remote instance of Janusgraph, from a local gremlin-console
如何从本地 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
这也很好用。在 gremlin 控制台上我 运行
: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[=10=](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 将被隔离到它自己的文件 space 否则。我认为您需要 Docker volume
或 bind
mount 才能正常工作。
根据 Stephen 的回复,我尝试了以下方法,效果很好:
正在设置 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 文件(您需要从此 link 下载并将您自己的本机文件路径替换为下载)
这是一个有用的 graphml 数据集。了解它 here and here。
要运行导入,打开一个新的bash终端2(su):
docker run --rm --link janusgraph-default:janusgraph -e GREMLIN_REMOTE_HOSTS=janusgraph -it janusgraph/janusgraph:latest ./bin/gremlin.sh
这 links 到 janusgraph 服务器(不需要端口绑定)并打开 gremlin-console。
在控制台上,运行:
:remote connect tinkerpop.server conf/remote.yaml
然后用
导入graphml文件
:> graph.io(graphml()).readGraph("/dataImports/air-routes.graphml")
它应该 return 为空。一旦有,运行 查询如:
:> g.V().has('airport','code','DFW').values()
如何从本地 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
这也很好用。在 gremlin 控制台上我 运行
: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
我能找到的所有文档都只处理本地导入而不处理远程
我试过了:
:> 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[=10=](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 将被隔离到它自己的文件 space 否则。我认为您需要 Docker volume
或 bind
mount 才能正常工作。
根据 Stephen 的回复,我尝试了以下方法,效果很好:
正在设置 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 文件(您需要从此 link 下载并将您自己的本机文件路径替换为下载)
这是一个有用的 graphml 数据集。了解它 here and here。
要运行导入,打开一个新的bash终端2(su):
docker run --rm --link janusgraph-default:janusgraph -e GREMLIN_REMOTE_HOSTS=janusgraph -it janusgraph/janusgraph:latest ./bin/gremlin.sh
这 links 到 janusgraph 服务器(不需要端口绑定)并打开 gremlin-console。
在控制台上,运行:
:remote connect tinkerpop.server conf/remote.yaml
然后用
导入graphml文件:> graph.io(graphml()).readGraph("/dataImports/air-routes.graphml")
它应该 return 为空。一旦有,运行 查询如:
:> g.V().has('airport','code','DFW').values()