跳到内容

安装

在 Docker 容器中运行 JanusGraph

为了实现虚拟化和便捷访问,JanusGraph 提供了一个 Docker 镜像。Docker 使在单台机器上运行服务器和客户端变得更容易,而无需处理多个安装。有关 Docker 的安装和使用说明,请参阅 Docker 指南。在 JanusGraph 服务器在一个容器中运行时,我们可以在另一个容器中或在裸机上运行客户端。在下面的示例中,我们使用 Gremlin Console 作为客户端。

在另一个 Docker 容器中运行 Gremlin 控制台

让我们从在 Docker 中运行一个简单的 JanusGraph 实例开始

$ docker run --name janusgraph-default janusgraph/janusgraph:latest

上述命令启动一个 JanusGraph 服务器实例。我们给容器命名,以便可以将第二个容器链接到它。服务器可能需要几秒钟才能启动,请耐心等待相应的日志消息出现。

示例日志
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/opt/janusgraph/lib/slf4j-log4j12-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/opt/janusgraph/lib/logback-classic-1.1.3.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.slf4j.impl.Log4jLoggerFactory]
0    [main] INFO  com.jcabi.manifests.Manifests  - 110 attributes loaded from 283 stream(s) in 130ms, 110 saved, 3770 ignored: ["Agent-Class", "Ant-Version", "Archiver-Version", "Automatic-Module-Name", "Bnd-LastModified", "Boot-Class-Path", "Branch", "Build-Date", "Build-Host", "Build-Id", "Build-Java-Version", "Build-Jdk", "Build-Job", "Build-Number", "Build-Timestamp", "Build-Version", "Built-At", "Built-By", "Built-Date", "Built-OS", "Built-On", "Built-Status", "Bundle-ActivationPolicy", "Bundle-Activator", "Bundle-BuddyPolicy", "Bundle-Category", "Bundle-ClassPath", "Bundle-ContactAddress", "Bundle-Description", "Bundle-DocURL", "Bundle-License", "Bundle-ManifestVersion", "Bundle-Name", "Bundle-NativeCode", "Bundle-RequiredExecutionEnvironment", "Bundle-SymbolicName", "Bundle-Vendor", "Bundle-Version", "Can-Redefine-Classes", "Change", "Class-Path", "Created-By", "DSTAMP", "DynamicImport-Package", "Eclipse-BuddyPolicy", "Eclipse-ExtensibleAPI", "Embed-Dependency", "Embed-Transitive", "Export-Package", "Extension-Name", "Extension-name", "Fragment-Host", "Gradle-Version", "Gremlin-Lib-Paths", "Gremlin-Plugin-Dependencies", "Gremlin-Plugin-Paths", "Ignore-Package", "Implementation-Build", "Implementation-Build-Date", "Implementation-Title", "Implementation-URL", "Implementation-Vendor", "Implementation-Vendor-Id", "Implementation-Version", "Import-Package", "Include-Resource", "JCabi-Build", "JCabi-Date", "JCabi-Version", "Java-Vendor", "Java-Version", "Main-Class", "Manifest-Version", "Maven-Version", "Module-Email", "Module-Origin", "Module-Owner", "Module-Source", "Originally-Created-By", "Os-Arch", "Os-Name", "Os-Version", "Package", "Premain-Class", "Private-Package", "Provide-Capability", "Require-Bundle", "Require-Capability", "Scm-Connection", "Scm-Revision", "Scm-Url", "Specification-Title", "Specification-Vendor", "Specification-Version", "TODAY", "TSTAMP", "Time-Zone-Database-Version", "Tool", "X-Compile-Elasticsearch-Snapshot", "X-Compile-Elasticsearch-Version", "X-Compile-Lucene-Version", "X-Compile-Source-JDK", "X-Compile-Target-JDK", "hash", "implementation-version", "mode", "package", "service", "url", "version"]
1    [main] INFO  org.apache.tinkerpop.gremlin.server.GremlinServer  - 3.4.1
            \,,,/
            (o o)
-----oOOo-(3)-oOOo-----

100  [main] INFO  org.apache.tinkerpop.gremlin.server.GremlinServer  - Configuring Gremlin Server from /etc/opt/janusgraph/gremlin-server.yaml
...
...
3965 [gremlin-server-boss-1] INFO  org.apache.tinkerpop.gremlin.server.GremlinServer  - Gremlin Server configured with worker thread pool of 1, gremlin pool of 8 and boss thread pool of 1.
3965 [gremlin-server-boss-1] INFO  org.apache.tinkerpop.gremlin.server.GremlinServer  - Channel started at port 8182.

我们现在可以指示 Docker 为客户端启动第二个容器,并将其链接到已经运行的服务器。这里我们使用 Gremlin Console (gremlin.sh) 作为客户端。

$ docker run --rm --link janusgraph-default:janusgraph -e GREMLIN_REMOTE_HOSTS=janusgraph \
    -it janusgraph/janusgraph:latest ./bin/gremlin.sh

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Configured janusgraph/172.17.0.2:8182

警告

上述命令仅建立与服务器的连接。它默认不将后续命令转发到服务器!因此,除非以 :> 开头,否则后续命令仍将在本地执行。

要将每个命令转发到远程服务器,请使用 :remote console 命令。更多文档可在 TinkerPop 参考文档中找到

在裸机上运行 Gremlin 控制台

我们也可以在裸机上运行 Gremlin 控制台。为了使服务器能够与 Gremlin 控制台通信,我们需要在启动 JanusGraph 服务器时暴露 8182 端口。

$ docker run -it -p 8182:8182 janusgraph/janusgraph

我们现在可以启动 Gremlin 控制台并尝试连接到服务器。我们需要下载发布的 zip 存档并启动 Gremlin 控制台(详见 本地安装 部分)。

$ bin/gremlin.sh

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Configured localhost/127.0.0.1:8182

如需进一步阅读,请参阅 JanusGraph 服务器 部分以及 JanusGraph Docker 文档

本地安装

要运行 JanusGraph,需要 Java 8 SE。确保 $JAVA_HOME 环境变量指向安装 JRE 或 JDK 的正确位置。JanusGraph 可以从项目仓库的 发布 部分下载为 .zip 存档。

$ unzip janusgraph-1.1.0.zip
Archive:  janusgraph-1.1.0.zip
  creating: janusgraph-1.1.0/
...

解压下载的存档后,即可开始使用。

运行 Gremlin 控制台

Gremlin 控制台是一个交互式 shell,可让您访问 JanusGraph 管理的数据。您可以通过运行项目 bin 目录中的 gremlin.sh 脚本来访问它。

$ cd janusgraph-1.1.0
$ bin/gremlin.sh

         \,,,/
         (o o)
-----oOOo-(3)-oOOo-----
09:12:24 INFO  org.apache.tinkerpop.gremlin.hadoop.structure.HadoopGraph  - HADOOP_GREMLIN_LIBS is set to: /usr/local/janusgraph/lib
plugin activated: tinkerpop.hadoop
plugin activated: janusgraph.imports
gremlin>

Gremlin 控制台使用 Apache Groovy 解释命令,Groovy 是 Java 的超集。Gremlin-Groovy 通过提供一组用于基本和高级图遍历功能的方法来扩展 Groovy。有关 Gremlin 语言功能的深入了解,请参阅我们的 Gremlin 介绍

运行 JanusGraph 服务器

在大多数实际用例中,对数据库的查询不会在数据存储的同一个服务器上运行。相反,会存在某种客户端-服务器层次结构,其中服务器运行数据库并处理请求,而多个客户端创建这些请求,从而独立地读写数据库中的条目。JanusGraph 也可以实现这种行为。

要在本地机器上启动服务器,只需运行 janusgraph-server.sh 脚本而不是 gremlin.sh 脚本。您可以选择性地将配置文件作为参数传递。默认配置位于 conf/gremlin-server/gremlin-server.yaml

$ ./bin/janusgraph-server.sh start
或者
$ ./bin/janusgraph-server.sh console ./conf/gremlin-server/gremlin-server-[...].yaml

信息

默认配置 (gremlin-server.yaml) 使用其自己的内存后端而不是专用的数据库服务器。默认情况下不使用搜索后端,因此不支持混合索引,因为未指定搜索后端(如果您遵循 基本使用示例,请确保使用 GraphOfTheGodsFactory.loadWithoutMixedIndex(graph, true) 而不是 GraphOfTheGodsFactory.load(graph))。有关存储后端的更多信息,请访问文档的 相应部分

现在,您的本地机器上正在运行一个 Gremlin 服务器,并在默认端口 8182 上等待客户端连接。要实例化客户端——如前所述——运行 gremlin.sh 脚本。同样,本地 Gremlin 控制台将出现。这一次,我们将 Gremlin 控制台连接到远程服务器,并将其所有查询重定向到该服务器,而不是在本地使用它。这通过使用 :remote 命令来完成。

gremlin> :remote connect tinkerpop.server conf/remote.yaml
==>Configured localhost/127.0.0.1:8182
正如您可能从日志中看到的那样,在这种情况下,客户端和服务器在同一台机器上运行。使用不同的设置时,您所要做的就是修改 conf/remote.yaml 文件中的参数。

使用预打包分发版

注意

从 0.5.1 开始,这需要下载 janusgraph-full-1.1.0.zip 而不是默认的 janusgraph-1.1.0.zip

JanusGraph 发布版 预配置为开箱即用地运行 JanusGraph 服务器,利用示例 Cassandra 和 Elasticsearch 配置,让用户可以快速开始使用 JanusGraph 服务器。此配置默认允许客户端应用程序通过 WebSocket 使用自定义子协议连接到 JanusGraph 服务器。有许多用不同语言开发的客户端来帮助支持该子协议。最熟悉的 WebSocket 接口客户端是 Gremlin 控制台。快速入门包并非旨在代表生产安装,但确实提供了一种使用 JanusGraph 服务器进行开发、运行测试以及了解组件如何连接在一起的方法。要使用此默认配置

  • 发布页面 下载当前 janusgraph-full-$VERSION.zip 文件。

  • 解压并进入 janusgraph--full-$VERSION 目录

  • 运行 bin/janusgraph.sh start。此步骤将启动 Gremlin Server,并将 Cassandra/ES 分叉到单独的进程中。请注意,出于安全原因,Elasticsearch 和因此 janusgraph.sh 必须在非 root 帐户下运行。

$ bin/janusgraph.sh start
Forking Cassandra...
Running `nodetool statusthrift`.. OK (returned exit status 0 and printed string "running").
Forking Elasticsearch...
Connecting to Elasticsearch (127.0.0.1:9300)... OK (connected to 127.0.0.1:9300).
Forking Gremlin-Server...
Connecting to Gremlin-Server (127.0.0.1:8182)... OK (connected to 127.0.0.1:8182).
Run gremlin.sh to connect.

清理预打包分发版后的文件

如果您想重新开始并删除数据库和日志,可以使用 janusgraph.sh 的 clean 命令。在运行 clean 操作之前应停止服务器。

$ cd /Path/to/janusgraph/janusgraph-{project.version}/
$ ./bin/janusgraph.sh stop
Killing Gremlin-Server (pid 91505)...
Killing Elasticsearch (pid 91402)...
Killing Cassandra (pid 91219)...
$ ./bin/janusgraph.sh clean
Are you sure you want to delete all stored data and logs? [y/N] y
Deleted data in /Path/to/janusgraph/janusgraph-{project.version}/db
Deleted logs in /Path/to/janusgraph/janusgraph-{project.version}/log