图数据库JanusGraph介绍及使用(三):安装与初步使用

2024-05-07 09:08

本文主要是介绍图数据库JanusGraph介绍及使用(三):安装与初步使用,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

图数据库JanusGraph介绍及使用(三):安装与初步使用

 

说明:这是图数据库JanusGraph系列的第三篇,后面会陆续介绍。

图数据库JanusGraph介绍及使用(一):简介 https://blog.csdn.net/gobitan/article/details/80939224 

图数据库JanusGraph介绍及使用(二):架构 https://blog.csdn.net/gobitan/article/details/80939276

3. JanusGraph安装与初步使用

环境:CentOS7 64位

3.1 JanusGraph下载

下载JanusGraph,https://github.com/JanusGraph/janusgraph/releases,当前(2018-07-05)版本为0.2.0,下载janusgraph-0.2.0-hadoop2.zip,263M。

3.2 Oracle JDK8安装

JanusGraph需要Java8,推荐使用Oracle Java8,并设置JAVA_HOME环境变量。因为较为简单,安装过程略。

3.3 JanusGraph安装

将拷贝到/opt目录下,然后执行如下操作:

[root@app opt]# unzip ~/janusgraph-0.2.0-hadoop2.zip

[root@app opt]# cd janusgraph-0.2.0-hadoop2/

[root@app janusgraph-0.2.0-hadoop2]# bin/gremlin.sh

         \,,,/

         (o o)

-----oOOo-(3)-oOOo-----

plugin activated: janusgraph.imports

plugin activated: tinkerpop.server

plugin activated: tinkerpop.utilities

SLF4J: Class path contains multiple SLF4J bindings.

SLF4J: Found binding in [jar:file:/opt/janusgraph-0.2.0-hadoop2/lib/slf4j-log4j12-1.7.12.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in [jar:file:/opt/janusgraph-0.2.0-hadoop2/lib/logback-classic-1.1.2.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]

21:32:58 WARN  org.apache.hadoop.util.NativeCodeLoader  - Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

plugin activated: tinkerpop.hadoop

plugin activated: tinkerpop.spark

plugin activated: tinkerpop.tinkergraph

gremlin>

3.4 Gremlin控制台

Gremlin控制台解释器使用的是Apache Groovy,如下所示:

gremlin> 1+3

==>4

3.5 加载图数据

JanusGraph有个很有名的图数据案例,叫做"The Graph of the Gods",也称罗马诸神。JanusGraphFactory提供了静态的方法来加载图数据。默认情况下,JanusGraph使用Berkeley DB作为后端存储引擎,使用Elasticsearch作为索引引擎。

Gods图如下:

注意:在0.2.0版本中janusgraph-berkeleyje-es.properties不再支持ES的本地模式,但官方的文档未更新。因此,如果直接执行如下语句:

gremlin> graph = JanusGraphFactory.open('conf/janusgraph-berkeleyje-es.properties')

就会报类似这样的错误:Could not instantiate implementation: org.janusgraph.diskstorage.es.ElasticSearchIndex。

详细参见:https://groups.google.com/forum/#!topic/janusgraph-users/oWeMitqWCRk

这里,我采用的解决办法是自己安装一个Elasticsearch,安装方法很简单。

3.5.1 安装Elasticsearch

[root@centos7 ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.rpm

[root@centos7 ~]# rpm -i elasticsearch-6.2.4.rpm

[root@centos7 ~]# systemctl daemon-reload

[root@centos7 ~]# systemctl enable elasticsearch

[root@centos7 ~]# systemctl start elasticsearch

检查Elasticsearch是否启动完成

[root@centos7 ~]# curl http://localhost:9200

注意:Elasticsearch启动需要一些时间,刚开始的时候curl可能返回连接被拒绝。

3.5.2 加载Gods图数据

gremlin> graph = JanusGraphFactory.open('conf/janusgraph-berkeleyje-es.properties')

==>standardjanusgraph[berkeleyje:/opt/janusgraph-0.2.0-hadoop2/conf/../db/berkeley]

gremlin> GraphOfTheGodsFactory.load(graph)

==>null

gremlin> g = graph.traversal()

==>graphtraversalsource[standardjanusgraph[berkeleyje:/opt/janusgraph-0.2.0-hadoop2/conf/../db/berkeley], standard]

gremlin>

这一步将Gods图数据已经加载到了JanusGraph。

3.5.3 查询Gods图数据

假定在name属性上有唯一性约束。那么就可以找到Saturn顶点。如下所示:

查询顶点

gremlin> saturn = g.V().has('name', 'saturn').next()

==>v[4128]

查看Saturn顶点的值

gremlin> g.V(saturn).valueMap()

==>[name:[saturn],age:[10000]]

 

通过关系找到Saturn的孙子的名字

gremlin> g.V(saturn).in('father').in('father').values('name')

==>hercules

place属性也是一个索引,它是边的属性。因此,可以通过它查询发生在雅典(纬度:37.97和经度:23.72)50公里以内的素有事件,然后查出所有涉及到的顶点。如下所有:

gremlin> g.E().has('place', geoWithin(Geoshape.circle(37.97, 23.72, 50)))

==>e[4ck-6cg-9hx-39c][8224-battled->4224]

==>e[4qs-6cg-9hx-6dk][8224-battled->8264]

gremlin>

gremlin> g.E().has('place', geoWithin(Geoshape.circle(37.97, 23.72, 50))).as('source').inV().as('god2').select('source').outV().as('god1').select('god1', 'god2').by('name')

==>[god1:hercules,god2:nemean]

==>[god1:hercules,god2:hydra]

gremlin>

对图数据库和图计算感兴趣的朋友,欢迎加入"图数据库与图计算"QQ群:463749267,这里有很多志同道合的朋友跟你一起讨论Neo4j,JanusGraph,GraphX,Tinkerpop等等。

参考资料:

[1] http://janusgraph.org/ JanusGraph官方网址

[2] https://github.com/JanusGraph/janusgraph JanusGraph的github源码网址

[3] https://docs.janusgraph.org/latest/index.html JanusGraph的官方文档

这篇关于图数据库JanusGraph介绍及使用(三):安装与初步使用的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/966923

相关文章

使用Docker构建Python Flask程序的详细教程

《使用Docker构建PythonFlask程序的详细教程》在当今的软件开发领域,容器化技术正变得越来越流行,而Docker无疑是其中的佼佼者,本文我们就来聊聊如何使用Docker构建一个简单的Py... 目录引言一、准备工作二、创建 Flask 应用程序三、创建 dockerfile四、构建 Docker

Python使用vllm处理多模态数据的预处理技巧

《Python使用vllm处理多模态数据的预处理技巧》本文深入探讨了在Python环境下使用vLLM处理多模态数据的预处理技巧,我们将从基础概念出发,详细讲解文本、图像、音频等多模态数据的预处理方法,... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Python使用pip工具实现包自动更新的多种方法

《Python使用pip工具实现包自动更新的多种方法》本文深入探讨了使用Python的pip工具实现包自动更新的各种方法和技术,我们将从基础概念开始,逐步介绍手动更新方法、自动化脚本编写、结合CI/C... 目录1. 背景介绍1.1 目的和范围1.2 预期读者1.3 文档结构概述1.4 术语表1.4.1 核

Conda与Python venv虚拟环境的区别与使用方法详解

《Conda与Pythonvenv虚拟环境的区别与使用方法详解》随着Python社区的成长,虚拟环境的概念和技术也在不断发展,:本文主要介绍Conda与Pythonvenv虚拟环境的区别与使用... 目录前言一、Conda 与 python venv 的核心区别1. Conda 的特点2. Python v

Spring Boot中WebSocket常用使用方法详解

《SpringBoot中WebSocket常用使用方法详解》本文从WebSocket的基础概念出发,详细介绍了SpringBoot集成WebSocket的步骤,并重点讲解了常用的使用方法,包括简单消... 目录一、WebSocket基础概念1.1 什么是WebSocket1.2 WebSocket与HTTP

C#中Guid类使用小结

《C#中Guid类使用小结》本文主要介绍了C#中Guid类用于生成和操作128位的唯一标识符,用于数据库主键及分布式系统,支持通过NewGuid、Parse等方法生成,感兴趣的可以了解一下... 目录前言一、什么是 Guid二、生成 Guid1. 使用 Guid.NewGuid() 方法2. 从字符串创建

Python使用python-can实现合并BLF文件

《Python使用python-can实现合并BLF文件》python-can库是Python生态中专注于CAN总线通信与数据处理的强大工具,本文将使用python-can为BLF文件合并提供高效灵活... 目录一、python-can 库:CAN 数据处理的利器二、BLF 文件合并核心代码解析1. 基础合

Python使用OpenCV实现获取视频时长的小工具

《Python使用OpenCV实现获取视频时长的小工具》在处理视频数据时,获取视频的时长是一项常见且基础的需求,本文将详细介绍如何使用Python和OpenCV获取视频时长,并对每一行代码进行深入解析... 目录一、代码实现二、代码解析1. 导入 OpenCV 库2. 定义获取视频时长的函数3. 打开视频文

Spring IoC 容器的使用详解(最新整理)

《SpringIoC容器的使用详解(最新整理)》文章介绍了Spring框架中的应用分层思想与IoC容器原理,通过分层解耦业务逻辑、数据访问等模块,IoC容器利用@Component注解管理Bean... 目录1. 应用分层2. IoC 的介绍3. IoC 容器的使用3.1. bean 的存储3.2. 方法注

Python内置函数之classmethod函数使用详解

《Python内置函数之classmethod函数使用详解》:本文主要介绍Python内置函数之classmethod函数使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 类方法定义与基本语法2. 类方法 vs 实例方法 vs 静态方法3. 核心特性与用法(1编程客