Как загрузить файл graphml в удаленный экземпляр Janusgraph из локальной консоли gremlin

#gremlin #tinkerpop #janusgraph

#gremlin #tinkerpop #janusgraph

Вопрос:

Как загрузить файл graphml в удаленный экземпляр Janusgraph из локальной консоли gremlin

В конце концов, я хочу создать JanusGraph на удаленной виртуальной машине, но для этого я создал локальный образ 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 может управлять сервером gremlin в образе docker, я хотел импортировать K Lawrence’s air-routes-latest.graphml , чтобы попытаться создать некоторые операции CRUD в 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$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, но, возможно, удаленной виртуальной машины) или локальной консоли? Я не могу найти никакой помощи, чтобы пролить свет на эту помощь, пожалуйста?

  Gremlin.version()
==>3.4.4
  

gremlin-консоль janusgraph tinkerpop gremlin

Ответ №1:

В настоящее время Gremlin io() не работает таким образом. Когда ваш io() шаг оценивается, он использует локальную файловую систему, в которой он выполняется, для выполнения своей работы. В вашем случае у вас есть контейнер docker, работающий в той же системе, так что вы могли бы технически сделать то, что вы просите, я думаю, но я думаю, что контейнер Docker должен быть настроен для монтирования /home/greg/Downloads/ таким образом, чтобы он был доступен для него. В противном случае Docker будет изолирован от своего собственного файлового пространства. Я думаю, вам нужен Docker volume или bind mount, чтобы заставить это работать должным образом.

Ответ №2:

После ответа Стивена я попробовал следующее, которое сработало:

Настройка сервера 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 для игры. Читайте об этом здесь и здесь .

Чтобы запустить импорт, откройте новый терминал 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")
  

Он должен возвращать значение null. Как только это произойдет, запустите запросы типа:

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