代码之家  ›  专栏  ›  技术社区  ›  Samarth

无法使用gremlinpython进行查询

  •  4
  • Samarth  · 技术社区  · 6 年前

    我在用 gremlinpython

    下面是我正在远程运行的Python代码:

    from gremlin_python import statics
    from gremlin_python.structure.graph import Graph
    from gremlin_python.process.graph_traversal import __
    from gremlin_python.process.strategies import *
    from gremlin_python.driver.driver_remote_connection import DriverRemoteConnection
    
    graph = Graph()
    g = graph.traversal().withRemote(DriverRemoteConnection('ws://<IP>:8182/gremlin','g', 
    username="janusgraph"))
    print g.V().has('name', 'saturn').next()
    

    这是我得到的例外:

    Traceback (most recent call last):
      File "test.py", line 10, in <module>
        print g.V().has('name', 'saturn').next()
      File "/root/venv/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 70, in next
        return self.__next__()
      File "/root/venv/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 43, in __next__
        self.traversal_strategies.apply_strategies(self)
      File "/root/venv/lib/python2.7/site-packages/gremlin_python/process/traversal.py", line 346, in apply_strategies
        traversal_strategy.apply(traversal)
      File "/root/venv/lib/python2.7/site-packages/gremlin_python/driver/remote_connection.py", line 143, in apply
        remote_traversal = self.remote_connection.submit(traversal.bytecode)
      File "/root/venv/lib/python2.7/site-packages/gremlin_python/driver/driver_remote_connection.py", line 54, in submit
        results = result_set.all().result()
      File "/root/venv/lib/python2.7/site-packages/concurrent/futures/_base.py", line 462, in result
        return self.__get_result()
      File "/root/venv/lib/python2.7/site-packages/concurrent/futures/_base.py", line 414, in __get_result
        raise exception_type, self._exception, self._traceback
    KeyError: None
    

    来自Gremlin shell的输出:

    gremlin> graph = JanusGraphFactory.open('conf/janusgraph-hbase-es.properties')
    ==>standardjanusgraph[hbase:[slv-01, slv-02, slv-03]]
    gremlin> GraphOfTheGodsFactory.load(graph)
    ==>null
    gremlin> g = graph.traversal()
    ==>graphtraversalsource[standardjanusgraph[hbase:[slv-01, slv-02, slv-03]], standard]
    gremlin> saturn = g.V().has('name', 'saturn').next()
    ==>v[4152]
    gremlin> g.V(saturn).valueMap()
    ==>[name:[saturn],age:[10000]]
    

    gremlin-server.yaml文件

    host: <IP>
    port: 8182
    scriptEvaluationTimeout: 30000
    channelizer: org.apache.tinkerpop.gremlin.server.channel.WebSocketChannelizer
    graphs: {
      graph: conf/gremlin-server/janusgraph-hbase-es.properties
    }
    plugins:
      - janusgraph.imports
    scriptEngines: {
      gremlin-groovy: {
        imports: [java.lang.Math],
        staticImports: [java.lang.Math.PI],
        scripts: [scripts/empty-sample.groovy]}}
    serializers:
      - { 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.GraphSONMessageSerializerGremlinV1d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistryV1d0] }}
      - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerGremlinV2d0, config: { ioRegistries: [org.janusgraph.graphdb.tinkerpop.JanusGraphIoRegistry] }}
      - { 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
    

    # JanusGraph configuration sample: HBase and Elasticsearch
    #
    # This file connects to HBase using a Zookeeper quorum
    # (storage.hostname) consisting solely of localhost.  It also connects
    # to Elasticsearch running on localhost over Elasticsearch's native "Transport"
    # protocol.  Zookeeper, the HBase services, and Elasticsearch must already 
    # be running and available before starting JanusGraph with this file.
    
    # The primary persistence provider used by JanusGraph.  This is required. 
    # It should be set one of JanusGraph's built-in shorthand names for its
    # standard storage backends (shorthands: berkeleyje, cassandrathrift,
    # cassandra, astyanax, embeddedcassandra, cql, hbase, inmemory) or to the
    # full package and classname of a custom/third-party StoreManager
    # implementation.
    #
    # Default:    (no default value)
    # Data Type:  String
    # Mutability: LOCAL
    
    gremlin.graph=org.janusgraph.core.JanusGraphFactory
    
    storage.backend=hbase
    storage.hbase.ext.zookeeper.znode.parent=/hbase-unsecure
    storage.hbase.table = janusgraph
    
    # The hostname or comma-separated list of hostnames of storage backend
    # servers.  This is only applicable to some storage backends, such as
    # cassandra and hbase.
    #
    # Default:    127.0.0.1
    # Data Type:  class java.lang.String[]
    # Mutability: LOCAL
    storage.hostname=slv-01,slv-02,slv-03
    
    # Whether to enable JanusGraph's database-level cache, which is shared
    # across all transactions. Enabling this option speeds up traversals by
    # holding hot graph elements in memory, but also increases the likelihood
    # of reading stale data.  Disabling it forces each transaction to
    # independently fetch graph elements from storage before reading/writing
    # them.
    #
    # Default:    false
    # Data Type:  Boolean
    # Mutability: MASKABLE
    cache.db-cache = true
    
    # How long, in milliseconds, database-level cache will keep entries after
    # flushing them.  This option is only useful on distributed storage
    # backends that are capable of acknowledging writes without necessarily
    # making them immediately visible.
    #
    # Default:    50
    # Data Type:  Integer
    # Mutability: GLOBAL_OFFLINE
    #
    # Settings with mutability GLOBAL_OFFLINE are centrally managed in
    # JanusGraph's storage backend.  After starting the database for the first
    # time, this file's copy of this setting is ignored.  Use JanusGraph's
    # Management System to read or modify this value after bootstrapping.
    cache.db-cache-clean-wait = 20
    
    # Default expiration time, in milliseconds, for entries in the
    # database-level cache. Entries are evicted when they reach this age even
    # if the cache has room to spare. Set to 0 to disable expiration (cache
    # entries live forever or until memory pressure triggers eviction when set
    # to 0).
    #
    # Default:    10000
    # Data Type:  Long
    # Mutability: GLOBAL_OFFLINE
    #
    # Settings with mutability GLOBAL_OFFLINE are centrally managed in
    # JanusGraph's storage backend.  After starting the database for the first
    # time, this file's copy of this setting is ignored.  Use JanusGraph's
    # Management System to read or modify this value after bootstrapping.
    cache.db-cache-time = 180000
    
    # Size of JanusGraph's database level cache.  Values between 0 and 1 are
    # interpreted as a percentage of VM heap, while larger values are
    # interpreted as an absolute size in bytes.
    #
    # Default:    0.3
    # Data Type:  Double
    # Mutability: MASKABLE
    cache.db-cache-size = 0.5
    
    # The indexing backend used to extend and optimize JanusGraph's query
    # functionality. This setting is optional.  JanusGraph can use multiple
    # heterogeneous index backends.  Hence, this option can appear more than
    # once, so long as the user-defined name between "index" and "backend" is
    # unique among appearances.Similar to the storage backend, this should be
    # set to one of JanusGraph's built-in shorthand names for its standard
    # index backends (shorthands: lucene, elasticsearch, es, solr) or to the
    # full package and classname of a custom/third-party IndexProvider
    # implementation.
    #
    # Default:    elasticsearch
    # Data Type:  String
    # Mutability: GLOBAL_OFFLINE
    #
    # Settings with mutability GLOBAL_OFFLINE are centrally managed in
    # JanusGraph's storage backend.  After starting the database for the first
    # time, this file's copy of this setting is ignored.  Use JanusGraph's
    # Management System to read or modify this value after bootstrapping.
    index.search.backend=elasticsearch
    
    # The hostname or comma-separated list of hostnames of index backend
    # servers.  This is only applicable to some index backends, such as
    # elasticsearch and solr.
    #
    # Default:    127.0.0.1
    # Data Type:  class java.lang.String[]
    # Mutability: MASKABLE
    index.search.hostname=<ES IP>:9201
    index.search.index-name = search
    

    有人能帮忙吗?谢谢。

    1 回复  |  直到 6 年前
        1
  •  3
  •   Samarth    6 年前

    最新版本(3.3.3)的 gremlinpython 小精灵 将解决此问题。退房 this blog 有关使用Python连接Janusgraph的完整指南。