簡體   English   中英

如何從本地 gremlin 控制台將 graphml 文件加載到 Janusgraph 的遠程實例中

[英]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 volumebind安裝才能使其正常工作。

按照斯蒂芬的回應,我嘗試了以下方法,效果很好:

設置 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM