JanusGraph安装

安装

在Docker容器里运行JanusGraph

为了实现虚拟化和易于访问,JanuGraph提供了Docker映像。Docker使在一台计算机上运行服务器和客户端更容易,而不处理多个安装。有关安装和使用Docker的说明,请参阅Docker指南。让我们在Docker中尝试运行一个简单的JanuGraph实例:

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

我们以交互方式运行映像,并请求Docker使容器的端口8182可用,以便我们查看。服务器可能需要几秒钟才能启动,因此耐心等待相应的日志消息出现。

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.

我们现在可以在本地设备上启动Gremlin控制台并尝试连接到新服务器:

$ bin/gremlin.sh

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

请注意,当在没有Docker的情况下本地运行客户机和服务器时,这个客户端的工作方式与以前完全相同。

方便的是,还可以在单独的Docker容器中运行服务器和客户机。因此,我们为服务器实例化一个容器:

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

我们现在可以指示Docker为客户机启动第二个容器,并将其链接到已经运行的服务器。

$ 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

请注意,为了使这个示例正常工作,不必绑定任何端口。要进一步阅读,请参阅JanusGraph服务器部分以及JanusGraph Docker文档。

本地安装

为了运行JanusGraph,需要java8se。确保$JAVA_HOME环境变量指向安装JRE或JDK的正确位置。JanusGraph可以作为.zip存档文件从项目存储库的发行版部分下载。

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

解压缩下载的存档文件后,就可以开始了。

运行Gremlin控制台

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

$ cd janusgraph-0.5.3
$ 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解释命令,apache groovy是Java的超集。gremlin groovy通过提供一组基本和高级图遍历函数的方法来扩展Groovy。要深入了解Gremlin语言的特性,请参阅我们的Gremlin简介。

运行Gremlin服务

在大多数实际用例中,对数据库的查询不会从存储数据的服务器上运行。相反,会有某种类型的客户机-服务器层次结构,其中服务器运行数据库并处理请求,而多个客户机创建这些请求,从而在数据库中独立地读写条目。这种行为也可以通过JanusGraph实现。
为了在本地计算机上启动服务器,只需运行gremlin-server.sh脚本而不是gremlin.sh脚本。您可以选择将配置文件作为参数传递。默认配置位于conf/gremlin server/gremlin-server.yaml。

$ ./bin/gremlin-server.sh start

or

$ ./bin/gremlin-server.sh ./conf/gremlin-server/[...].yaml
INFO
	默认配置(gremlin server.yaml)使用自己的inmemory后端,而不是专用的数据库服务器。默认情况下不使用搜索后端,因此不支持混合索引,因为未指定搜索后端(如果遵循基本用法示例,请确保您使用的是graphof thegodsfactory.loadWithoutMixedIndex(graph,true)而不是graphof thegodsfactory.load(graph))。有关存储后端的更多信息,请访问文档的相应部分。
	我们还鼓励您查看janusgraph.sh,默认情况下,它启动的服务器比gremlin-server.sh更复杂。关于服务器配置的更多文档可以在JanusGraph服务器部分找到(这需要下载janusgraph-full-0.5.3.zip,而不是默认的janusgraph-0.5.3.zip。)

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文件中的参数。

WARNING
	上面的命令只建立到服务器的连接。默认情况下,它不会将以下命令转发到服务器!因此,进一步的命令仍将在本地执行,除非前面有:>。
	要将每个命令转发到远程服务器,请使用:remote console命令。更多文档可以在TinkerPop参考文档中找到
	
上一篇:Linux常用命令总结


下一篇:压缩 与解压缩