HugeGraph是一款易用、高效、通用的开源图数据库系统(Graph Database,GitHub项目地址),实现了Apache TinkerPop3框架及完全兼容Gremlin查询语言,具备完善的工具链组件,助力用户轻松构建基于图数据库之上的应用和产品。HugeGraph支持百亿以上的顶点和边快速导入,并提供毫秒级的关联关系查询能力(OLTP),并可与Hadoop、Spark等大数据平台集成以进行离线分析(OLAP)。
HugeGraph典型应用场景包括深度关系探索、关联分析、路径搜索、特征抽取、数据聚类、社区检测、 知识图谱等,适用业务领域有如网络安全、电信诈骗、金融风控、广告推荐、社交网络和智能机器人等。
本系统的主要应用场景是解决百度安全事业部所面对的反欺诈、威胁情报、黑产打击等业务的图数据存储和建模分析需求,在此基础上逐步扩展及支持了更多的通用图应用。
HugeGraph支持在线及离线环境下的图操作,支持批量导入数据,支持高效的复杂关联关系分析,并且能够与大数据平台无缝集成。HugeGraph支持多用户并行操作,用户可输入Gremlin查询语句,并及时得到图查询结果,也可在用户程序中调用HugeGraph API进行图分析或查询。
本系统具备如下特点:
本系统的功能包括但不限于:
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的图分析工具 |
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 |
HugeGraph-Server 是HugeGraph 项目的核心部分,包含Core、Backend、API等子模块。
Core模块是Tinkerpop接口的实现,Backend模块用于管理数据存储,目前支持的后端包括:Memory、Cassandra、ScyllaDB以及RocksDB,API模块提供HTTP Server,将Client的HTTP请求转化为对Core的调用。
文档中会大量出现
HugeGraph-Server
及HugeGraphServer
这两种写法,其他组件也类似。这两种写法含义上并无大的差异,可以这么区分:HugeGraph-Server
表示服务端相关组件代码,HugeGraphServer
表示服务进程。
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
有三种方式可以部署HugeGraph-Server组件:
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包。
如果需要快速启动HugeGraph仅用于测试,那么只需要进行少数几个配置项的修改即可。详细的配置介绍请参考配置文档及配置项
启动分为"首次启动"和"非首次启动",这么区分是因为在第一次启动前需要初始化后端数据库,然后启动服务。而在人为停掉服务后,或者其他原因需要再次启动服务时,因为后端数据库是持久化存在的,直接启动服务即可。
HugeGraphServer启动时会连接后端存储并尝试检查后端存储版本号,如果没有初始化过后端或者后端初始化版本不对(旧版本初始化过)时,HugeGraphServer会启动失败,并给出错误信息。
如果需要外部访问HugeGraphServer,请修改rest-server.properties
的restserver.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.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
包含vertices
、edges
schema
包含vertexlabels
、propertykeys
、edgelabels
、indexlabels
gremlin
包含各种Gremlin
语句,如g.v()
,可以同步或者异步执行traverser
包含各种高级查询,包括最短路径、交叉点、N步可达邻居等task
包含异步任务的查询和删除6.2.1获取hugegraph
的顶点及相关属性
curl http://localhost:8080/graphs/hugegraph/graph/vertices
说明
由于图的点和边很多,对于list 型的请求,比如获取所有顶点,获取所有边等,Server 会将数据压缩再返回, 所以使用curl 时得到一堆乱码,可以重定向至gunzip 进行解压。推荐使用Chrome 浏览器+ Restlet 插件发送HTTP 请求进行测试。
curl "http://localhost:8080/graphs/hugegraph/graph/vertices" | gunzip
当前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文档
$cd hugegraph-${version}
$bin/stop-hugegraph.sh