HugeGraph简介及部署

Welcome to HugeGraph

Summary

HugeGraph是一款易用、高效、通用的开源图数据库系统(Graph Database,GitHub项目地址),实现了Apache TinkerPop3框架及完全兼容Gremlin查询语言,具备完善的工具链组件,助力用户轻松构建基于图数据库之上的应用和产品。HugeGraph支持百亿以上的顶点和边快速导入,并提供毫秒级的关联关系查询能力(OLTP),并可与Hadoop、Spark等大数据平台集成以进行离线分析(OLAP)。

HugeGraph典型应用场景包括深度关系探索、关联分析、路径搜索、特征抽取、数据聚类、社区检测、 知识图谱等,适用业务领域有如网络安全、电信诈骗、金融风控、广告推荐、社交网络和智能机器人等。

本系统的主要应用场景是解决百度安全事业部所面对的反欺诈、威胁情报、黑产打击等业务的图数据存储和建模分析需求,在此基础上逐步扩展及支持了更多的通用图应用。

Features

HugeGraph支持在线及离线环境下的图操作,支持批量导入数据,支持高效的复杂关联关系分析,并且能够与大数据平台无缝集成。HugeGraph支持多用户并行操作,用户可输入Gremlin查询语句,并及时得到图查询结果,也可在用户程序中调用HugeGraph API进行图分析或查询。

本系统具备如下特点:

  • 易用:HugeGraph支持Gremlin图查询语言与Restful API,同时提供图检索常用接口,具备功能齐全的周边工具,轻松实现基于图的各种查询分析运算。
  • 高效:HugeGraph在图存储和图计算方面做了深度优化,提供多种批量导入工具,轻松完成百亿数据快速导入,通过优化过的查询达到图检索的毫秒级响应。支持数千用户并发的在线实时操作。
  • 通用:HugeGraph支持Apache Gremlin标准图查询语言和Property Graph标准图建模方法,支持基于图的OLTP和OLAP方案。集成Apache Hadoop及Apache Spark大数据平台。
  • 可扩展:支持分布式存储、数据多副本及横向扩容,内置多种后端存储引擎,也可插件式轻松扩展后端存储引擎。
  • 开放:HugeGraph代码开源(Apache 2 License),客户可自主修改定制,选择性回馈开源社区。

本系统的功能包括但不限于:

  • 支持从TXT、CSV、JSON等格式的文件中批量导入数据
  • 具备可视化操作界面,降低用户使用门槛
  • 优化的图接口:最短路径(Shortest Path)、K步连通子图(K-neighbor)、K步到达邻接点(K-out)等
  • 基于Apache TinkerPop3框架实现,支持Gremlin图查询语言
  • 支持属性图,顶点和边均可添加属性,支持丰富的属性类型
  • 具备独立的Schema元数据信息,方便第三方系统集成
  • 支持多顶点ID策略:支持主键ID、支持自动生成ID、支持用户自定义字符串ID、支持用户自定义数字ID
  • 可以对边和顶点的属性建立索引,支持精确查询、范围查询、全文检索
  • 存储系统采用插件方式,支持RocksDB、Cassandra、ScyllaDB、HBase、Palo、MySQL以及InMemory等
  • 与Hadoop、Spark GraphX等大数据系统集成,支持Bulk Load操作

Modules

  • HugeGraph-Server : HugeGraph-Server是HugeGraph项目的核心部分,包含Core、Backend、API等子模块;
    • Core:图引擎实现,向下连接Backend模块,向上支持API模块;
    • Backend:实现将图数据存储到后端,支持的后端包括:Memory、Cassandra、ScyllaDB、RocksDB、HBase及MySQL,用户根据实际情况选择一种即可;
    • API:内置REST Server,向用户提供RESTful API,同时完全兼容Gremlin查询。
  • HugeGraph-Client:HugeGraph-Client提供了RESTful API的客户端,用于连接HugeGraph-Server,目前仅实现Java版,其他语言用户可自行实现;
  • HugeGraph-Loader:HugeGraph-Loader是基于HugeGraph-Client的数据导入工具,将普通文本数据转化为图形的顶点和边并插入图形数据库中;
  • HugeGraph-Spark:HugeGraph-Spark能在图上做并行计算,例如PageRank算法等;
  • HugeGraph-Studio:HugeGraph-Studio是HugeGraph的Web可视化工具,可用于执行Gremlin语句及展示图;
  • HugeGraph-Tools:HugeGraph-Tools是HugeGraph的部署和管理工具,包括管理图、备份/恢复、Gremlin执行等功能。

Download HugeGraph

Latest version

The latest HugeGraph: 0.9.2 , released on 2019-04-19 .

components description download
HugeGraph-Server HugeGraph的主程序 0.9.2
HugeGraph-Studio 基于Web的图形化展示工具 0.9.0
HugeGraph-Loader 数据导入工具 0.9.0
HugeGraph-Tools 命令行工具集 1.3.0
HugeGraph-Spark 基于Spark GraphX的图分析工具  

Versions mapping

server client loader studio spark common tools
0.9.2 1.7.0 0.9.0 0.9.0   1.6.0 1.3.0
0.8.0 1.6.4 0.8.0 0.8.0   1.5.3 1.2.0
0.7.4 1.5.8 0.7.0 0.7.0   1.4.9 1.1.0
0.6.1 1.5.6 0.6.1 0.6.1   1.4.3 1.0.0
0.5.6 1.5.0 0.5.6 0.5.0   1.4.0  
0.4.5 1.4.7 0.2.2 0.4.1   1.3.12  

Release Notes

  • 2019-04-19: Release HugeGraph 0.9.2,see HugeGraph 0.9.2 Release Notes
  • 2018-11-23: Release HugeGraph 0.8.0,see HugeGraph 0.8.0 Release Notes
  • 2018-07-30: Release HugeGraph 0.7.4,see HugeGraph 0.7.4 Release Notes
  • 2018-06-01: Release HugeGraph 0.6.1,see HugeGraph 0.6.1 Release Notes
  • 2018-03-29: Release HugeGraph 0.5.6,see HugeGraph 0.5.6 Release Notes
  • 2018-01-12: Release HugeGraph 0.4.4,see HugeGraph 0.4.4 Release Notes
  • 2017-11-06: Release HugeGraph 0.3.3,see HugeGraph 0.3.3 Release Notes
  • 2017-09-08: Release HugeGraph 0.2.4,see HugeGraph 0.2.4 Release Notes
  • 2017-08-15: Release HugeGraph 0.2,see HugeGraph 0.2 Release Notes

HugeGraphServer Quick Start

1 概述

HugeGraph-Server 是HugeGraph 项目的核心部分,包含Core、Backend、API等子模块。

Core模块是Tinkerpop接口的实现,Backend模块用于管理数据存储,目前支持的后端包括:Memory、Cassandra、ScyllaDB以及RocksDB,API模块提供HTTP Server,将Client的HTTP请求转化为对Core的调用。

文档中会大量出现HugeGraph-ServerHugeGraphServer这两种写法,其他组件也类似。这两种写法含义上并无大的差异,可以这么区分:HugeGraph-Server表示服务端相关组件代码,HugeGraphServer表示服务进程。

2 依赖

2.1 安装JDK-1.8

HugeGraph-Server 基于jdk-1.8开发,代码用到了较多jdk-1.8中的类和方法,请用户自行安装配置。

在往下阅读之前务必执行java -version命令查看jdk版本

java -version

2.2 安装GCC-4.3.0(GLIBCXX_3.4.10)或更新版本(可选)

如果使用的是RocksDB后端,请务必执行gcc --version命令查看gcc版本;若使用其他后端,则不需要。

gcc --version

3 部署

有三种方式可以部署HugeGraph-Server组件:

  • 方式1:一键部署
  • 方式2:下载tar包
  • 方式3:源码编译

3.1 一键部署

HugeGraph-Tools提供了一键部署的命令行工具,用户可以使用该工具快速地一键下载、解压、配置并启动HugeGraphServer和HugeGraphStudio。当然,还是得先下载HugeGraph-Tools的tar包。

wget https://github.com/hugegraph/hugegraph-tools/releases/download/v${version}/hugegraph-tools-${version}.tar.gz
tar -zxvf hugegraph-tools-${version}.tar.gz
cd hugegraph-tools-${version}

注:${version}为版本号,最新版本号可参考Download页面,或直接从Download页面点击链接下载

HugeGraph-Tools的总入口脚本是bin/hugegraph,用户可以使用help子命令查看其用法,这里只介绍一键部署的命令。

bin/hugegraph deploy -v {hugegraph-version} -p {install-path} [-u {download-path-prefix}]

{hugegraph-version}表示要部署的HugeGraphServer及HugeGraphStudio的版本,用户可查看conf/version-mapping.yaml文件获取版本信息,{install-path}指定HugeGraphServer及HugeGraphStudio的安装目录,{download-path-prefix}可选,指定HugeGraphServer及HugeGraphStudio tar包的下载地址,不提供时使用默认下载地址,比如要启动0.6版本的HugeGraph-Server及HugeGraphStudio将上述命令写为bin/hugegraph deploy -v 0.6 -p services即可。

3.2 下载tar包

wget https://github.com/hugegraph/hugegraph/releases/download/v${version}/hugegraph-${version}.tar.gz
tar -zxvf hugegraph-${version}.tar.gz

3.3 源码编译

下载HugeGraph源代码

git clone https://github.com/hugegraph/hugegraph.git

编译打包生成tar包

cd hugegraph
mvn package -DskipTests

执行日志如下:

......
[INFO] Reactor Summary:
[INFO] 
[INFO] hugegraph .......................................... SUCCESS [  0.003 s]
[INFO] hugegraph-core ..................................... SUCCESS [ 15.335 s]
[INFO] hugegraph-api ...................................... SUCCESS [  0.829 s]
[INFO] hugegraph-cassandra ................................ SUCCESS [  1.095 s]
[INFO] hugegraph-scylladb ................................. SUCCESS [  0.313 s]
[INFO] hugegraph-rocksdb .................................. SUCCESS [  0.506 s]
[INFO] hugegraph-mysql .................................... SUCCESS [  0.412 s]
[INFO] hugegraph-palo ..................................... SUCCESS [  0.359 s]
[INFO] hugegraph-dist ..................................... SUCCESS [  7.470 s]
[INFO] hugegraph-example .................................. SUCCESS [  0.403 s]
[INFO] hugegraph-test ..................................... SUCCESS [  1.509 s]
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
......

执行成功后,在hugegraph目录下生成hugegraph-*.tar.gz 文件,就是编译生成的tar包。

4 配置

如果需要快速启动HugeGraph仅用于测试,那么只需要进行少数几个配置项的修改即可。详细的配置介绍请参考配置文档及配置项

5 启动

启动分为"首次启动"和"非首次启动",这么区分是因为在第一次启动前需要初始化后端数据库,然后启动服务。而在人为停掉服务后,或者其他原因需要再次启动服务时,因为后端数据库是持久化存在的,直接启动服务即可。

HugeGraphServer启动时会连接后端存储并尝试检查后端存储版本号,如果没有初始化过后端或者后端初始化版本不对(旧版本初始化过)时,HugeGraphServer会启动失败,并给出错误信息。

如果需要外部访问HugeGraphServer,请修改rest-server.propertiesrestserver.url配置项(默认为http://127.0.0.1:8080),修改成机器名或IP地址。

由于各种后端所需的配置(hugegraph.properties)及启动步骤略有不同,下面逐一对各后端的配置及启动做介绍。

5.1 Memory

修改hugegraph.properties

backend=memory
serializer=text

Memory后端的数据是保存在内存中无法持久化的,不需要初始化后端,这也是唯一一个不需要初始化的后端。

启动server

bin/start-hugegraph.sh
Starting HugeGraphServer...
Connecting to HugeGraphServer (http://127.0.0.1:8080/graphs)....OK

提示的url 与rest-server.properties 中配置的restserver.url 一致

5.2 RocksDB

RocksDB是一个嵌入式的数据库,不需要手动安装部署, 要求GCC 版本>= 4.3.0(GLIBCXX_3.4.10),如不满足,需要提前升级GCC

修改hugegraph.properties

backend=rocksdb
serializer=binary
rocksdb.data_path=.
rocksdb.wal_path=.

初始化数据库(仅第一次启动时需要)

cd hugegraph-${version}
bin/init-store.sh

启动server

bin/start-hugegraph.sh
Starting HugeGraphServer...
Connecting to HugeGraphServer (http://127.0.0.1:8080/graphs)....OK

5.3 Cassandra

用户需自行安装Cassandra,要求版本3.0以上,下载地址

修改hugegraph.properties

backend=cassandra
serializer=cassandra

# cassandra backend config
cassandra.host=localhost
cassandra.port=9042
cassandra.username=
cassandra.password=
#cassandra.connect_timeout=5
#cassandra.read_timeout=20

#cassandra.keyspace.strategy=SimpleStrategy
#cassandra.keyspace.replication=3

初始化数据库(仅第一次启动时需要)

cd hugegraph-${version}
bin/init-store.sh
Initing HugeGraph Store...
2017-12-01 11:26:51 1424  [main] [INFO ] com.baidu.hugegraph.HugeGraph [] - Opening backend store: 'cassandra'
2017-12-01 11:26:52 2389  [main] [INFO ] com.baidu.hugegraph.backend.store.cassandra.CassandraStore [] - Failed to connect keyspace: hugegraph, try init keyspace later
2017-12-01 11:26:52 2472  [main] [INFO ] com.baidu.hugegraph.backend.store.cassandra.CassandraStore [] - Failed to connect keyspace: hugegraph, try init keyspace later
2017-12-01 11:26:52 2557  [main] [INFO ] com.baidu.hugegraph.backend.store.cassandra.CassandraStore [] - Failed to connect keyspace: hugegraph, try init keyspace later
2017-12-01 11:26:53 2797  [main] [INFO ] com.baidu.hugegraph.backend.store.cassandra.CassandraStore [] - Store initialized: huge_graph
2017-12-01 11:26:53 2945  [main] [INFO ] com.baidu.hugegraph.backend.store.cassandra.CassandraStore [] - Store initialized: huge_schema
2017-12-01 11:26:53 3044  [main] [INFO ] com.baidu.hugegraph.backend.store.cassandra.CassandraStore [] - Store initialized: huge_index
2017-12-01 11:26:53 3046  [pool-3-thread-1] [INFO ] com.baidu.hugegraph.backend.Transaction [] - Clear cache on event 'store.init'
2017-12-01 11:26:59 9720  [main] [INFO ] com.baidu.hugegraph.HugeGraph [] - Opening backend store: 'cassandra'
2017-12-01 11:27:00 9805  [main] [INFO ] com.baidu.hugegraph.backend.store.cassandra.CassandraStore [] - Failed to connect keyspace: hugegraph1, try init keyspace later
2017-12-01 11:27:00 9886  [main] [INFO ] com.baidu.hugegraph.backend.store.cassandra.CassandraStore [] - Failed to connect keyspace: hugegraph1, try init keyspace later
2017-12-01 11:27:00 9955  [main] [INFO ] com.baidu.hugegraph.backend.store.cassandra.CassandraStore [] - Failed to connect keyspace: hugegraph1, try init keyspace later
2017-12-01 11:27:00 10175 [main] [INFO ] com.baidu.hugegraph.backend.store.cassandra.CassandraStore [] - Store initialized: huge_graph
2017-12-01 11:27:00 10321 [main] [INFO ] com.baidu.hugegraph.backend.store.cassandra.CassandraStore [] - Store initialized: huge_schema
2017-12-01 11:27:00 10413 [main] [INFO ] com.baidu.hugegraph.backend.store.cassandra.CassandraStore [] - Store initialized: huge_index
2017-12-01 11:27:00 10413 [pool-3-thread-1] [INFO ] com.baidu.hugegraph.backend.Transaction [] - Clear cache on event 'store.init'

启动server

bin/start-hugegraph.sh
Starting HugeGraphServer...
Connecting to HugeGraphServer (http://127.0.0.1:8080/graphs)....OK

5.4 ScyllaDB

用户需自行安装ScyllaDB,推荐版本2.1以上,下载地址

修改hugegraph.properties

backend=scylladb
serializer=scylladb

# cassandra backend config
cassandra.host=localhost
cassandra.port=9042
cassandra.username=
cassandra.password=
#cassandra.connect_timeout=5
#cassandra.read_timeout=20

#cassandra.keyspace.strategy=SimpleStrategy
#cassandra.keyspace.replication=3

由于scylladb 数据库本身就是基于cassandra 的"优化版",如果用户未安装scylladb ,也可以直接使用cassandra 作为后端存储,只需要把backend 和serializer 修改为scylladb,host 和post 指向cassandra 集群的seeds 和port 即可,但是并不建议这样做,这样发挥不出scylladb 本身的优势了。

初始化数据库(仅第一次启动时需要)

cd hugegraph-${version}
bin/init-store.sh

启动server

bin/start-hugegraph.sh
Starting HugeGraphServer...
Connecting to HugeGraphServer (http://127.0.0.1:8080/graphs)....OK

5.5 HBase

用户需自行安装HBase,要求版本2.0以上,下载地址

修改hugegraph.properties

backend=hbase
serializer=hbase

# hbase backend config
hbase.hosts=localhost
hbase.port=2181

初始化数据库(仅第一次启动时需要)

cd hugegraph-${version}
bin/init-store.sh

启动server

bin/start-hugegraph.sh
Starting HugeGraphServer...
Connecting to HugeGraphServer (http://127.0.0.1:8080/graphs)....OK

6 访问Server

6.1 服务启动状态校验

jps查看服务进程

jps
6475 HugeGraphServer

curl请求RestfulAPI

echo `curl -o /dev/null -s -w %{http_code} "http://localhost:8080/graphs/hugegraph/graph/vertices"`

返回结果200,代表server启动正常

6.2 请求Server

HugeGraphServer的RESTful API包括多种类型的资源,典型的包括graph、schema、gremlin、traverser和task,

  • graph包含verticesedges
  • schema包含vertexlabelspropertykeysedgelabelsindexlabels
  • gremlin包含各种Gremlin语句,如g.v(),可以同步或者异步执行
  • traverser包含各种高级查询,包括最短路径、交叉点、N步可达邻居等
  • task包含异步任务的查询和删除

6.2.1获取hugegraph的顶点及相关属性

curl http://localhost:8080/graphs/hugegraph/graph/vertices

说明

  1. 由于图的点和边很多,对于list 型的请求,比如获取所有顶点,获取所有边等,Server 会将数据压缩再返回, 所以使用curl 时得到一堆乱码,可以重定向至gunzip 进行解压。推荐使用Chrome 浏览器+ Restlet 插件发送HTTP 请求进行测试。

     curl "http://localhost:8080/graphs/hugegraph/graph/vertices" | gunzip
    
  2. 当前HugeGraphServer的默认配置只能是本机访问,可以修改配置,使其能在其他机器访问。

     vim conf/rest-server.properties
    
     restserver.url=http://0.0.0.0:8080
    

响应体如下:

{
    "vertices": [
        {
            "id": "2lop",
            "label": "software",
            "type": "vertex",
            "properties": {
                "price": [
                    {
                        "id": "price",
                        "value": 328
                    }
                ],
                "name": [
                    {
                        "id": "name",
                        "value": "lop"
                    }
                ],
                "lang": [
                    {
                        "id": "lang",
                        "value": "java"
                    }
                ]
            }
        },
        {
            "id": "1josh",
            "label": "person",
            "type": "vertex",
            "properties": {
                "name": [
                    {
                        "id": "name",
                        "value": "josh"
                    }
                ],
                "age": [
                    {
                        "id": "age",
                        "value": 32
                    }
                ]
            }
        },
        ...
    ]
}

详细的API请参考Restful-API文档

7 停止Server

$cd hugegraph-${version}
$bin/stop-hugegraph.sh

你可能感兴趣的:(大数据,环境搭建)