[英]How to load a graphml file into a remote instance of Janusgraph, from a local gremlin-console
如何從本地 gremlin 控制台將 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')
為了測試它是否有效,我運行了:> gV().values('name')
,它返回了chris
(我認為)證明了 gremlin-console 可以控制air-routes-latest.graphml
鏡像中的 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
小精靈控制台 janusgraph tinkerpop 小精靈
此時,Gremlin io()
不以這種方式工作。 當您的io()
步驟被評估時,它使用執行它的本地文件系統來完成它的工作。 在您的情況下,您有一個在同一系統上運行的 docker 容器,因此從技術上講,您可以按照我的要求執行您的要求,但我認為需要將 Docker 容器配置為將/home/greg/Downloads/
在這樣的位置一種時尚,它將提供給它。 否則,Docker 將與它自己的文件空間隔離。 我認為您需要一個 Docker volume
或bind
安裝才能使其正常工作。
按照斯蒂芬的回應,我嘗試了以下方法,效果很好:
設置 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>
刪除沖突容器)
這/dataImports
本機文件夾/home/greg/Downloads/gremlin
/dataImports
為圖像中的/dataImports
,因此可以導入air-routes.graphml文件(您需要從此鏈接下載並將您自己的本機文件路徑替換為下載)這是一個有用的 graphml 數據集。 在這里和這里閱讀它。
要運行導入,請打開一個新的 bash 終端 2 (su):
docker run --rm --link janusgraph-default:janusgraph -e GREMLIN_REMOTE_HOSTS=janusgraph -it janusgraph/janusgraph:latest ./bin/gremlin.sh
這鏈接到 janusgraph 服務器(不需要端口綁定)並打開 gremlin 控制台。
在控制台上,運行:
:remote connect tinkerpop.server conf/remote.yaml
然后導入graphml文件
:> graph.io(graphml()).readGraph("/dataImports/air-routes.graphml")
它應該返回空值。 完成后,運行如下查詢:
:> g.V().has('airport','code','DFW').values()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.