Skip to content

Version 1.7 of the documentation is no longer actively maintained. The site that you are currently viewing is an archived snapshot. For up-to-date documentation, see the latest version.

Server Startup Guide

1 Overview

The directory for the configuration files is hugegraph-release/conf, and all the configurations related to the service and the graph itself are located in this directory.

The main configuration files include gremlin-server.yaml, rest-server.properties, and hugegraph.properties.

The HugeGraphServer integrates the GremlinServer and RestServer internally, and gremlin-server.yaml and rest-server.properties are used to configure these two servers.

  • GremlinServer: GremlinServer accepts Gremlin requests and invokes the graph engine.
  • RestServer: It provides a RESTful API that, based on different HTTP requests, calls the corresponding Core API. If the user’s request body is a Gremlin statement, it will be forwarded to GremlinServer to perform operations on the graph data.

Now let’s introduce these three configuration files one by one.

2. gremlin-server.yaml

The main structure of gremlin-server.yaml is shown below. Some imports are omitted from this example; refer to the file included in the release package for the complete content.

  1# host and port of gremlin server, need to be consistent with host and port in rest-server.properties
  2#host: 127.0.0.1
  3#port: 8182
  4
  5# timeout in ms of gremlin query
  6evaluationTimeout: 30000
  7
  8channelizer: org.apache.tinkerpop.gremlin.server.channel.WsAndHttpChannelizer
  9# don't set graph at here, this happens after support for dynamically adding graph
 10graphs: {
 11}
 12scriptEngines: {
 13  gremlin-groovy: {
 14    staticImports: [
 15      org.opencypher.gremlin.process.traversal.CustomPredicates.*',
 16      org.opencypher.gremlin.traversal.CustomFunctions.*
 17    ],
 18    plugins: {
 19      org.apache.hugegraph.plugin.HugeGraphGremlinPlugin: {},
 20      org.apache.tinkerpop.gremlin.server.jsr223.GremlinServerGremlinPlugin: {},
 21      org.apache.tinkerpop.gremlin.jsr223.ImportGremlinPlugin: {
 22        classImports: [
 23          java.lang.Math,
 24          org.apache.hugegraph.backend.id.IdGenerator,
 25          org.apache.hugegraph.type.define.Directions,
 26          org.apache.hugegraph.type.define.NodeRole,
 27          org.apache.hugegraph.traversal.algorithm.CollectionPathsTraverser,
 28          org.apache.hugegraph.traversal.algorithm.CountTraverser,
 29          org.apache.hugegraph.traversal.algorithm.CustomizedCrosspointsTraverser,
 30          org.apache.hugegraph.traversal.algorithm.CustomizePathsTraverser,
 31          org.apache.hugegraph.traversal.algorithm.FusiformSimilarityTraverser,
 32          org.apache.hugegraph.traversal.algorithm.HugeTraverser,
 33          org.apache.hugegraph.traversal.algorithm.JaccardSimilarTraverser,
 34          org.apache.hugegraph.traversal.algorithm.KneighborTraverser,
 35          org.apache.hugegraph.traversal.algorithm.KoutTraverser,
 36          org.apache.hugegraph.traversal.algorithm.MultiNodeShortestPathTraverser,
 37          org.apache.hugegraph.traversal.algorithm.NeighborRankTraverser,
 38          org.apache.hugegraph.traversal.algorithm.PathsTraverser,
 39          org.apache.hugegraph.traversal.algorithm.PersonalRankTraverser,
 40          org.apache.hugegraph.traversal.algorithm.SameNeighborTraverser,
 41          org.apache.hugegraph.traversal.algorithm.ShortestPathTraverser,
 42          org.apache.hugegraph.traversal.algorithm.SingleSourceShortestPathTraverser,
 43          org.apache.hugegraph.traversal.algorithm.SubGraphTraverser,
 44          org.apache.hugegraph.traversal.algorithm.TemplatePathsTraverser,
 45          org.apache.hugegraph.traversal.algorithm.steps.EdgeStep,
 46          org.apache.hugegraph.traversal.algorithm.steps.RepeatEdgeStep,
 47          org.apache.hugegraph.traversal.algorithm.steps.WeightedEdgeStep,
 48          org.apache.hugegraph.traversal.optimize.ConditionP,
 49          org.apache.hugegraph.traversal.optimize.Text,
 50          org.apache.hugegraph.traversal.optimize.TraversalUtil,
 51          org.apache.hugegraph.util.DateUtil,
 52          org.opencypher.gremlin.traversal.CustomFunctions,
 53          org.opencypher.gremlin.traversal.CustomPredicate
 54        ],
 55        methodImports: [
 56          java.lang.Math#*,
 57          org.opencypher.gremlin.traversal.CustomPredicate#*,
 58          org.opencypher.gremlin.traversal.CustomFunctions#*
 59        ]
 60      },
 61      org.apache.tinkerpop.gremlin.jsr223.ScriptFileGremlinPlugin: {
 62        files: [scripts/empty-sample.groovy]
 63      }
 64    }
 65  }
 66}
 67serializers:
 68  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphBinaryMessageSerializerV1,
 69      config: {
 70        serializeResultToString: false,
 71        ioRegistries: [org.apache.hugegraph.io.HugeGraphIoRegistry]
 72      }
 73  }
 74  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV1d0,
 75      config: {
 76        serializeResultToString: false,
 77        ioRegistries: [org.apache.hugegraph.io.HugeGraphIoRegistry]
 78      }
 79  }
 80  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV2d0,
 81      config: {
 82        serializeResultToString: false,
 83        ioRegistries: [org.apache.hugegraph.io.HugeGraphIoRegistry]
 84      }
 85  }
 86  - { className: org.apache.tinkerpop.gremlin.driver.ser.GraphSONMessageSerializerV3d0,
 87      config: {
 88        serializeResultToString: false,
 89        ioRegistries: [org.apache.hugegraph.io.HugeGraphIoRegistry]
 90      }
 91  }
 92metrics: {
 93  consoleReporter: {enabled: false, interval: 180000},
 94  csvReporter: {enabled: false, interval: 180000, fileName: ./metrics/gremlin-server-metrics.csv},
 95  jmxReporter: {enabled: false},
 96  slf4jReporter: {enabled: false, interval: 180000},
 97  gangliaReporter: {enabled: false, interval: 180000, addressingMode: MULTICAST},
 98  graphiteReporter: {enabled: false, interval: 180000}
 99}
100maxInitialLineLength: 4096
101maxHeaderSize: 8192
102maxChunkSize: 8192
103maxContentLength: 65536
104maxAccumulationBufferComponents: 1024
105resultIterationBatchSize: 64
106writeBufferLowWaterMark: 32768
107writeBufferHighWaterMark: 65536
108ssl: {
109  enabled: false
110}

In most cases, you only need to pay attention to channelizer, host, and port. Graphs are not loaded from the Gremlin Server graphs section. Whether local graph configurations are loaded is controlled by graph.load_from_local_config in rest-server.properties.

  • channelizer: The default WsAndHttpChannelizer supports both WebSocket and HTTP. Gremlin Console uses WebSocket, while HugeGraph Client, Loader, and Hubble use HTTP.

By default, the GremlinServer serves at localhost:8182. If you need to modify it, configure the host and port settings.

  • host: The hostname or IP address of the machine where the GremlinServer is deployed. Currently, HugeGraphServer does not support distributed deployment, and GremlinServer is not directly exposed to users.
  • port: The port number of the machine where the GremlinServer is deployed.

Additionally, you need to add the corresponding configuration gremlinserver.url=http://host:port in rest-server.properties.

3. rest-server.properties

The following is an example of the available rest-server.properties options. The current upstream release template does not include graph.load_from_local_config, whose source-code default is false; set it explicitly to true when using local graph configurations under conf/graphs.

 1# bind url
 2# could use '0.0.0.0' or specified (real)IP to expose external network access
 3restserver.url=http://127.0.0.1:8080
 4#restserver.enable_graphspaces_filter=false
 5# gremlin server url, need to be consistent with host and port in gremlin-server.yaml
 6#gremlinserver.url=http://127.0.0.1:8182
 7
 8graphs=./conf/graphs
 9graph.load_from_local_config=true
10
11# The maximum thread ratio for batch writing, only take effect if the batch.max_write_threads is 0
12batch.max_write_ratio=80
13batch.max_write_threads=0
14
15# configuration of arthas
16arthas.telnetPort=8562
17arthas.httpPort=8561
18arthas.ip=127.0.0.1
19arthas.disabledCommands=jad
20
21# authentication configs
22#auth.authenticator=org.apache.hugegraph.auth.StandardAuthenticator
23# for admin password, By default, it is pa and takes effect upon the first startup
24#auth.admin_pa=pa
25#auth.graph_store=hugegraph
26
27# use pd
28# usePD=true
29
30# slow query log
31log.slow_query_threshold=1000
32# bytes of request body recorded as-is (may contain sensitive literals), 0 to disable
33log.slow_query_body_limit=512
34
35# jvm(in-heap) memory usage monitor, set 1 to disable it
36memory_monitor.threshold=0.85
37memory_monitor.period=2000
  • restserver.url: The URL at which the RestServer provides its services. Modify it according to the actual environment. If you can’t connet to server from other IP address, try to modify it as specific IP; or modify it as http://0.0.0.0 to listen all network interfaces as a convenient solution, but need to take care of the network area that might access.
  • graphs: The directory containing graph configuration files. The default is ./conf/graphs. init-store scans this directory; the Server loads its properties files only when graph.load_from_local_config=true.
  • graph.load_from_local_config: Whether the Server reads local graph configurations at startup. Its default value in the source code is false.

The current upstream template still uses arthas.telnet_port, arthas.http_port, and arthas.disabled_commands, but ServerOptions reads the camelCase names shown in the example above. Custom configurations should use arthas.telnetPort, arthas.httpPort, and arthas.disabledCommands.

The gremlinserver.url configuration option is the URL at which the GremlinServer provides services to the RestServer. By default, it is set to http://localhost:8182. If you need to modify it, it should match the host and port settings in gremlin-server.yaml.

4. hugegraph.properties

hugegraph.properties is a type of file. If the system has multiple graphs, there will be multiple similar files. This file is used to configure parameters related to graph storage and querying. The default content of the file is as follows:

 1# gremlin entrence to create graph
 2gremlin.graph=org.apache.hugegraph.HugeFactory
 3
 4# cache config
 5#schema.cache_capacity=100000
 6# vertex-cache default is 1000w, 10min expired
 7#vertex.cache_capacity=10000000
 8#vertex.cache_expire=600
 9# edge-cache default is 100w, 10min expired
10#edge.cache_capacity=1000000
11#edge.cache_expire=600
12
13# schema illegal name template
14#schema.illegal_name_regex=\s+|~.*
15
16# NOTE: since 1.7.0, only hstore, rocksdb, hbase, memory are supported for backend.
17# if you want to use Cassandra/MySql/PG... as backend, please use version < 1.7.0
18backend=rocksdb
19serializer=binary
20
21store=hugegraph
22
23# pd config
24#pd.peers=127.0.0.1:8686
25
26# task config
27task.schedule_period=10
28task.retry=0
29task.wait_timeout=10
30
31# if use 'ikanalyzer', need download jar from 'https://github.com/apache/hugegraph-doc/raw/ik_binary/dist/server/ikanalyzer-2012_u6.jar' to lib directory
32search.text_analyzer=jieba
33search.text_analyzer_mode=INDEX
34
35# rocksdb backend config
36#rocksdb.data_path=/path/to/disk
37#rocksdb.wal_path=/path/to/disk
38
39# hbase backend config
40#hbase.hosts=localhost
41#hbase.port=2181
42#hbase.znode_parent=/hbase
43#hbase.threads_max=64

Pay attention to the following uncommented items:

  • gremlin.graph: The entry point for GremlinServer startup. Users should not modify this item.
  • backend: The storage backend. Version 1.7.0 supports memory, rocksdb, hstore, and hbase.
  • serializer: The serializer used when writing schemas, vertices, and edges to the backend. RocksDB uses binary.
  • store: The storage name used by the graph in the backend.
  • rocksdb.data_path: This item is only meaningful when the backend is set to rocksdb. It specifies the data directory for RocksDB.
  • rocksdb.wal_path: This item is only meaningful when the backend is set to rocksdb. It specifies the log directory for RocksDB.

5. Multi-Graph Configuration

A Server can load multiple graphs, with a separate properties file for each graph. The following example creates a RocksDB graph named hugegraph_rocksdb and an in-memory graph named hugegraph_memory.

[Optional]: Modify rest-server.properties

You can modify the graph profile directory in the graphs option of rest-server.properties. The default configuration is graphs=./conf/graphs, if you want to change it to another directory then adjust the graphs option, e.g. adjust it to graphs=/etc/hugegraph/graphs, example is as follows:

1graphs=./conf/graphs
2graph.load_from_local_config=true

Under conf/graphs, create hugegraph_memory.properties and hugegraph_rocksdb.properties based on hugegraph.properties.

Configure hugegraph_memory.properties as follows:

1backend=memory
2serializer=text
3store=hugegraph_memory

Configure hugegraph_rocksdb.properties as follows:

1backend=rocksdb
2serializer=binary
3
4store=hugegraph_rocksdb

Stop the server, execute init-store.sh (to create a new database for the new graph), and restart the server.

1$ ./bin/stop-hugegraph.sh
 1$ ./bin/init-store.sh
 2
 3Initializing HugeGraph Store...
 42023-06-11 14:16:14 [main] [INFO] o.a.h.u.ConfigUtil - Scanning option 'graphs' directory './conf/graphs'
 52023-06-11 14:16:14 [main] [INFO] o.a.h.c.InitStore - Init graph with config file: ./conf/graphs/hugegraph_rocksdb.properties
 6...
 72023-06-11 14:16:15 [main] [INFO] o.a.h.StandardHugeGraph - Graph 'hugegraph_rocksdb' has been initialized
 82023-06-11 14:16:15 [main] [INFO] o.a.h.c.InitStore - Init graph with config file: ./conf/graphs/hugegraph_memory.properties
 9...
102023-06-11 14:16:16 [main] [INFO] o.a.h.StandardHugeGraph - Graph 'hugegraph_memory' has been initialized
112023-06-11 14:16:16 [main] [INFO] o.a.h.StandardHugeGraph - Close graph standardhugegraph[hugegraph_rocksdb]
12...
132023-06-11 14:16:16 [main] [INFO] o.a.h.HugeFactory - HugeFactory shutdown
142023-06-11 14:16:16 [hugegraph-shutdown] [INFO] o.a.h.HugeFactory - HugeGraph is shutting down
15Initialization finished.
1$ ./bin/start-hugegraph.sh
2
3Starting HugeGraphServer...
4Connecting to HugeGraphServer (http://127.0.0.1:8080/graphspaces/DEFAULT/graphs)...OK
5Started [pid 21614]

Check out created graphs:

1curl http://127.0.0.1:8080/graphspaces/DEFAULT/graphs
2
3{"graphs":["hugegraph_rocksdb","hugegraph_memory"]}

Get details of a graph:

1curl http://127.0.0.1:8080/graphspaces/DEFAULT/graphs/hugegraph_memory
2
3{"name":"hugegraph_memory","backend":"memory"}
1curl http://127.0.0.1:8080/graphspaces/DEFAULT/graphs/hugegraph_rocksdb
2
3{"name":"hugegraph_rocksdb","backend":"rocksdb"}