JanusGraph入門第一課和官方文檔踩坑

入門第一課是在IDEA裏建立一個項目,有些小曲折。這裏運行的Demo是讀取janusgraph示例的「神之圖」(Graph of the Gods)數據並打印,採用Hbase+ES組合,JanusGraph版本是0.4.0,諸位可參考如下開始janusgraph的調用之旅~java

官網Java依賴

<dependency>
    <groupId>org.janusgraph</groupId>
    <artifactId>janusgraph-core</artifactId>
    <version>0.4.0</version>
</dependency>
<dependency>
    <groupId>org.apache.tinkerpop</groupId>
    <artifactId>gremlin-driver</artifactId>
    <version>3.4.1</version>
</dependency>
複製代碼

Demo代碼

2019-09-14補充一下【Demo源碼】注:使用JanusGraph Embedded訪問方式,也就是嵌入式apache

import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.janusgraph.core.JanusGraph;
import org.janusgraph.core.JanusGraphFactory;

import java.util.List;

public class JanusConnect {
    public static void main(String[] args) throws Exception {
    
        //graph可類比Spark裏的SparkSession對象,一個統一訪問的入口
        JanusGraph graph = JanusGraphFactory.build()
                .set("storage.backend", "hbase")
                .set("storage.hostname", "10.110.120.1,10.110.120.2,10.110.120.3")
                .set("index.search.backend", "elasticsearch")
                .set("storage.hbase.table", "testgraph") //表中已有數據
                .set("index.search.hostname", "10.110.120.1,10.110.120.2,10.110.120.3")
                .open();

        GraphTraversalSource g = graph.traversal();

        //【next()檢索頂點,第一個action操做自動啓動事務,有點相似Spark的Action算子的做用了】若是末尾不加next就添加不成功
// g.addV("person").property("name", "John").next();
// g.addV("person").property("name", "Snow").next();
// g.addV("person").property("name", "Erya").next();
// g.tx().commit();

        System.out.println("Vertex count = " + g.V().count().next());
        System.out.println("Edges count = " + g.E().count().next());


        System.out.println("++++++++圖結構+++++++++" + graph.openManagement().printSchema());

        List<Vertex> ls = g.V().has("name").toList();


        for (Vertex v : ls) {
            System.out.println("標籤是======" + v.label() + "======名字是:" + v.value("name"));
        }

        g.close();
        graph.close();
    }
}

複製代碼

執行Demo報錯

Exception in thread "main" java.lang.IllegalArgumentException: Could not find implementation class: org.janusgraph.diskstorage.hbase.HBaseStoreManager
Caused by: java.lang.ClassNotFoundException: org.janusgraph.diskstorage.hbase.HBaseStoreManager
複製代碼

緣由:

個人demo裏的存儲後端是HBase,因janusgraph-core缺乏相應的類包致使!後端

解決辦法:

pom.xml添加:bash

<dependency>
        <groupId>org.janusgraph</groupId>
        <artifactId>janusgraph-all</artifactId>
        <version>0.4.0</version>
    </dependency>
複製代碼

若執行一下子後報錯

Exception in thread "main" java.lang.IllegalArgumentException: Could not instantiate implementation: org.janusgraph.diskstorage.es.ElasticSearchIndex
Caused by: java.lang.ClassNotFoundException: org.apache.http.concurrent.FutureCallback
複製代碼

緣由及解決辦法

索引後端是ES,缺乏http相關類,繼續在pom.xml文件中添加:elasticsearch

<dependency>
        <groupId>org.apache.httpcomponents</groupId>
        <artifactId>httpclient</artifactId>
        <version>4.5</version>
    </dependency>
複製代碼

繼續執行demo,已經能夠成功運行。post

部分查詢輸出:學習

標籤是============monster========名字是:hydra
10:45:51.997 [main] DEBUG o.j.d.hbase.HBaseKeyColumnValueStore - Generated HBase Filter ColumnRangeFilter [$, %)
標籤是============god========名字是:jupiter
10:45:52.001 [main] DEBUG o.j.d.hbase.HBaseKeyColumnValueStore - Generated HBase Filter ColumnRangeFilter [$, %)
標籤是============demigod========名字是:hercules
10:45:52.005 [main] DEBUG o.j.d.hbase.HBaseKeyColumnValueStore - Generated HBase Filter ColumnRangeFilter [$, %)
標籤是============god========名字是:pluto
10:45:52.011 [main] DEBUG o.j.d.hbase.HBaseKeyColumnValueStore - Generated HBase Filter ColumnRangeFilter [$, %)
標籤是============monster========名字是:cerberus
複製代碼

歸檔:【JanusGraph學習筆記】ui

問題筆記

JanusGraph學習筆記-問題與解決(總集)spa

相關文章
相關標籤/搜索