#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()