1. 程式人生 > >圖資料庫JanusGraph介紹及使用(三):安裝與初步使用

圖資料庫JanusGraph介紹及使用(三):安裝與初步使用

圖資料庫JanusGraph介紹及使用(三):安裝與初步使用

作者:家輝,日期:2018-07-05 CSDN部落格: http://blog.csdn.net/gobitan

 

說明:這是圖資料庫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目錄下,然後執行如下操作:

[[email protected] opt]# unzip ~/janusgraph-0.2.0-hadoop2.zip

[[email protected] opt]# cd janusgraph-0.2.0-hadoop2/

[[email protected] 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

[[email protected] ~]# wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.rpm

[[email protected] ~]# rpm -i elasticsearch-6.2.4.rpm

[[email protected] ~]# systemctl daemon-reload

[[email protected] ~]# systemctl enable elasticsearch

[[email protected] ~]# systemctl start elasticsearch

檢查Elasticsearch是否啟動完成

[[email protected] ~]# 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的官方文件