美文网首页知识图谱与图数据库
janusgraph 自建server使用手记

janusgraph 自建server使用手记

作者: 水他 | 来源:发表于2019-06-28 12:23 被阅读0次

    环境

    1. java8环境

    2. hadoop安装启动

      version servers master
      cdh-hadoop-2.6.0 spark-slave10, spark-slave11, spark-slave12, spark-slave13, spark-slave14 spark-slave10
    3. hbase安装启动

      version servers master
      cdh-zookeeper spark-slave10, spark-slave12, spark-slave14
      hbase-1.2.0-cdh5.15.0 spark-slave10, spark-slave11, spark-slave12, spark-slave13, spark-slave14 spark-slave10
    4. es安装启动

      version servers master
      elasticsearch-5.6.0 spark-slave12, spark-slave13, spark-slave14 spark-slave14
    1. janusgraph安装

      • janusgraph-0.3.0-hadoop2
      • 10.179.90.75
      • vi conf/my-hbase-es.properties
      storage.backend=hbase
      storage.hostname=slave10.spark.com,slave12.spark.com,slave14.spark.com
      storage.port=2181
      index.search.backend=elasticsearch
      index.search.hostname=slave12.spark.com:9200,slave13.spark.com:9200,slave14.spark.com:9200
      storage.index.search.client-only=true
      storage.index.search.local-mode=false
      storage.index.search.sniff=false
      gremlin.graph=org.janusgraph.core.JanusGraphFactory
      storage.batch-loading=true
      force-index=true
      storage.hbase.table=myjanusgraph
      
    2. 环境变量

    vi /etc/profile

    export JANUSGRAPH_HOME='/home/janus/janusgraph-0.3.0-hadoop2'
    export PATH=$PATH::$JANUSGRAPH_HOME/bin
    

    source /etc/profile

    本地初始化测试

    gremlin.sh

    gremlin> graph = JanusGraphFactory.open('conf/my-hbase-es.properties')
    ==>standardjanusgraph[hbase:[spark-slave10, spark-slave12, spark-slave14]]
    gremlin> GraphOfTheGodsFactory.load(graph)
    ==>null
    gremlin> g = graph.traversal()
    ==>graphtraversalsource[standardjanusgraph[hbase:[spark-slave10, spark-slave12, spark-slave14]], standard]
    gremlin> saturn = g.V().has('name', 'saturn').next()
    ==>v[4112]
    gremlin> g.V(saturn).valueMap()
    ==>[name:[saturn],age:[10000]]
    gremlin> g.V(saturn).in('father').in('father').values('name')
    ==>hercules
    

    hbase table

    myjanusgraph

    es index

    janusgraph index

    启动server

    conf

    cp conf/my-hbase-es.properties conf/gremlin-server/myserver-hbase-es.properties
    cp conf/gremlin-server/gremlin-server.yaml conf/gremlin-server/myws-gremlin-server.yaml

    host: 0.0.0.0
    port: 8182
    scriptEvaluationTimeout: 30000
    channelizer: org.apache.tinkerpop.gremlin.server.channel.WsAndHttpChannelizer
    graphs: {
        graph: conf/gremlin-server/myserver-hbase-es.properties
    }
    
    scriptEngines: {
      gremlin-groovy: {
        plugins: { org.janusgraph.graphdb.tinkerpop.plugin.JanusGraphGremlinPlugin: {},
                   org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},
                   org.apache.tinkerpop.gremlin.tinkergraph.jsr223.TinkerGraphGremlinPlugin: {},
                   org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {classImports: [java.lang.Math], methodImports: [java.lang.Math#*]},
                   org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {files: [scripts/empty-sample.groovy]}}}}
    serializers:
      - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
      - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV3d0, config: { serializeResultToString: true }}
      - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
      # Older serialization versions for backwards compatibility:
      - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
      - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoLiteMessageSerializerV1d0, config: {ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
      - { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}
      - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
      - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}
      - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}
    processors:
      - { className: org.apache.tinkerpop.gremlin.server.op.session.SessionOpProcessor, config: { sessionTimeout: 28800000 }}
      - { className: org.apache.tinkerpop.gremlin.server.op.traversal.TraversalOpProcessor, config: { cacheExpirationTime: 600000, cacheMaxSize: 1000 }}
    metrics: {
      consoleReporter: {enabled: true, interval: 180000},
      csvReporter: {enabled: true, interval: 180000, fileName: /tmp/gremlin-server-metrics.csv},
      jmxReporter: {enabled: true},
      slf4jReporter: {enabled: true, interval: 180000},
      gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
      graphiteReporter: {enabled: false, interval: 180000}}
    maxInitialLineLength: 4096
    maxHeaderSize: 8192
    maxChunkSize: 8192
    maxContentLength: 65536
    maxAccumulationBufferComponents: 1024
    resultIterationBatchSize: 64
    writeBufferLowWaterMark: 32768
    writeBufferHighWaterMark: 65536
    

    start

    gremlin-server.sh conf/gremlin-server/myws-gremlin-server.yaml

    server remote测试

    1. http curl

    curl -XPOST -Hcontent-type:application/json -d '{"gremlin":"g.V().count()"}' http://10.179.90.75:8182

    2. websocket client

    conf

    cp conf/remote.yaml conf/my-remote.yaml
    vi conf/my-remote.yaml

    hosts: [10.179.90.75]
    port: 8182
    serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { serializeResultToString: true }}
    

    cp remote-graph.properties my-remote-graph.properties
    vi my-remote-graph.properties

    gremlin.remote.remoteConnectionClass=org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection
    gremlin.remote.driver.clusterFile=conf/my-remote-objects.yaml
    gremlin.remote.driver.sourceName=g
    

    cp remote-objects.yaml my-remote-objects.yaml
    vi my-remote-objects.yaml

    hosts: [10.179.90.75]
    port: 8182
    serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
    

    test

    gremlin.sh

    gremlin> :remote connect tinkerpop.server conf/my-remote.yaml session
    ==>Configured 10.179.90.75/10.179.90.75:8182-[df860006-7383-4aed-89bb-4f07c27ae4c9]
    gremlin> graph = EmptyGraph.instance()
    ==>emptygraph[empty]
    gremlin> g = graph.traversal().withRemote("my-remote-graph.properties")
    ==>graphtraversalsource[emptygraph[empty], standard]
    gremlin> g.V().valueMap()
    ==>[name:[saturn],age:[10000]]
    ==>[name:[neptune],age:[4500]]
    ==>[name:[jupiter],age:[5000]]
    ==>[name:[alcmene],age:[45]]
    ==>[name:[tartarus]]
    ==>[name:[sky]]
    ==>[name:[hercules],age:[30]]
    ==>[name:[pluto],age:[4000]]
    ==>[name:[sea]]
    ==>[name:[hydra]]
    ==>[name:[cerberus]]
    ==>[name:[nemean]]
    

    3. java client

    代码结构

    pom.xml

            <dependency>
                <groupId>org.janusgraph</groupId>
                <artifactId>janusgraph-core</artifactId>
                <version>0.3.2</version>
            </dependency>
            <dependency>
                <groupId>org.apache.tinkerpop</groupId>
                <artifactId>gremlin-driver</artifactId>
                <version>3.3.3</version>
            </dependency>
    

    remote-graph.properties

    gremlin.remote.remoteConnectionClass=org.apache.tinkerpop.gremlin.driver.remote.DriverRemoteConnection
    gremlin.remote.driver.clusterFile=src/main/resources/remote-objects.yaml
    gremlin.remote.driver.sourceName=g
    

    remote-object.yaml

    hosts: [10.179.90.75]
    port: 8182
    serializer: { className: org.apache.tinkerpop.gremlin.driver.ser.GryoMessageSerializerV1d0,
                  config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
    

    main app

    package com.lsy.myjanus;
    
    import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
    import org.apache.tinkerpop.gremlin.structure.Graph;
    import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph;
    
    /**
     * Created by lisiyu.
     */
    public class JanusApp {
    
        public static void main(String[] args) throws Exception {
            Graph graph = EmptyGraph.instance();
            GraphTraversalSource g = graph.traversal().withRemote("remote-graph.properties");
            // Reuse 'g' across the application
            // and close it on shut-down to close open connections with g.close()
    
            Object age = g.V().has("name", "saturn").values("age").next();
            System.out.println("saturn'age is " + age + ".");
    
        }
    }
    

    相关文章

      网友评论

        本文标题:janusgraph 自建server使用手记

        本文链接:https://www.haomeiwen.com/subject/dpescctx.html