[HugeGraph] CentOS上基于MySQL的HugeGraph部署

2020年12月更新
官方发布了新版server,原可视化studio升级为hubble,支持0.10以上的server,原来的studio只支持0.10以下的server
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

HugeGraph是一款易用、高效、通用的开源图数据库系统(Graph Database),实现了Apache TinkerPop3框架及完全兼容Gremlin查询语言,具备完善的工具链组件,助力用户轻松构建基于图数据库之上的应用和产品。HugeGraph支持百亿以上的顶点和边快速导入,并提供毫秒级的关联关系查询能力(OLTP),并可与Hadoop、Spark等大数据平台集成以进行离线分析(OLAP)。
HugeGraph典型应用场景包括深度关系探索、关联分析、路径搜索、特征抽取、数据聚类、社区检测、 知识图谱等,适用业务领域有如网络安全、电信诈骗、金融风控、广告推荐、社交网络和智能机器人等。
本系统的主要应用场景是解决百度安全事业部所面对的反欺诈、威胁情报、黑产打击等业务的图数据存储和建模分析需求,在此基础上逐步扩展及支持了更多的通用图应用。

虽然网上的HugeGraph文案把它吹得天花乱坠,且还能查到一些评测显示其吊打JanusGraph,但网上除了官方文档以外,能查到的文档实在有限。在实际安装部署的过程中,遇到的问题也不少,好在GitHub项目里(仿佛是)开发人员还是比较活跃的,一些问题可以在GitHub里找到解答。

另附一篇看起来比较客观的文章:「JanusGraph与HugeGraph」图形数据库-技术选型-功能对比

下载

components description download
HugeGraph-Server HugeGraph的主程序 0.10.4
HugeGraph-Studio 基于Web的图形化展示工具 0.10.0

依赖

安装 JDK-1.8

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

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

java -version

这里亲测OpenJDK 11是不能运行HugeGraph的。

安装GCC-4.3.0或更新版本(可选)

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

gcc --version

安装 HugeGraph-Server

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

  • 方式1:一键部署(慢的要死)
  • 方式2:下载tar包
  • 方式3:源码编译

其中源码编译的方法一开始觉得太麻烦了,没有试,但最后发现目前的发版(0.10.4)有bug呢,如果直接从源码编译则没有问题,具体操作可以查看官方文档

解压缩

tar -zxvf hugegraph-${version}.tar.gz

使用内存快速启动

  1. 修改配置文件

    vim hugegraph-${version}/conf/hugegraph.properties
    

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

    backend=memory
    serializer=text
    
  2. 修改rest-server配置文件

    vim hugegraph-${version}/conf/rest-server.properties 
    

    如果需要使用RESTful API进行访问,则需要将url修改为本机IP

    # bind url
    restserver.url=http://172.20.xxx.xxx:8080
    
  3. 启动 server

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

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

停止Server

hugegraph-${version}/bin/stop-hugegraph.sh
no crontab for xxxx
The HugeGraphServer monitor has been closed
Killing HugeGraphServer(pid 36883)...OK

安装 HugeGraph-Studio

下载完成后解压缩:

tar zxvf hugegraph-studio-${version}.tar.gz

启动HugeGraph-Studio

修改配置文件:

vim hugegraph-studio-${version}/conf/hugegraph-studio.properties

以下为官网配置说明:

  • 将配置项studio.server.host的值localhost修改成机器名或 IP,这是 HugeGraph Studio 对外提供服务的host,如果只需要本地访问则保持不变即可;
  • 将配置项studio.server.port的值8088修改成想要的端口,这是 HugeGraph Studio 对外提供服务的port,如果则保持不变即可;
  • 将配置项graph.server.host的值localhost修改成 HugeGraph Server 的host,HugeGraph Studio 通过此项和graph.server.port与 HugeGraph Server 建立连接;
  • 将配置项graph.server.port的值8080修改成 HugeGraph Server 的port,HugeGraph Studio 通过graph.server.host和此项与 HugeGraph Server 建立连接;
  • 将配置项graph.name的值hugegraph修改成要连接的 HugeGraph Server 的图名,目前只允许连接一个图。

修改完上述配置后,即可启动 HugeGraph Studio(ctrl C结束)

hugegraph-studio-${version}/bin/hugegraph-studio.sh

建立演示图

graph.schema().propertyKey("name").asText().ifNotExist().create()
graph.schema().propertyKey("age").asInt().ifNotExist().create()
graph.schema().propertyKey("city").asText().ifNotExist().create()
graph.schema().propertyKey("lang").asText().ifNotExist().create()
graph.schema().propertyKey("date").asText().ifNotExist().create()
graph.schema().propertyKey("price").asInt().ifNotExist().create()
person = graph.schema().vertexLabel("person").properties("name", "age", "city").primaryKeys("name").ifNotExist().create()
software = graph.schema().vertexLabel("software").properties("name", "lang", "price").primaryKeys("name").ifNotExist().create()
knows = graph.schema().edgeLabel("knows").sourceLabel("person").targetLabel("person").properties("date").ifNotExist().create()
created = graph.schema().edgeLabel("created").sourceLabel("person").targetLabel("software").properties("date", "city").ifNotExist().create()
marko = graph.addVertex(T.label, "person", "name", "marko", "age", 29, "city", "Beijing")
vadas = graph.addVertex(T.label, "person", "name", "vadas", "age", 27, "city", "Hongkong")
marko.addEdge("knows", vadas, "date", "20160110")
marko = graph.addVertex(T.label, "person", "name", "marko", "age", 29, "city", "Beijing")
vadas = graph.addVertex(T.label, "person", "name", "vadas", "age", 27, "city", "Hongkong")
lop = graph.addVertex(T.label, "software", "name", "lop", "lang", "java", "price", 328)
josh = graph.addVertex(T.label, "person", "name", "josh", "age", 32, "city", "Beijing")
ripple = graph.addVertex(T.label, "software", "name", "ripple", "lang", "java", "price", 199)
peter = graph.addVertex(T.label, "person","name", "peter", "age", 29, "city", "Shanghai")
marko.addEdge("knows", vadas, "date", "20160110")
marko.addEdge("knows", josh, "date", "20130220")
marko.addEdge("created", lop, "date", "20171210", "city", "Shanghai")
josh.addEdge("created", ripple, "date", "20151010", "city", "Beijing")
josh.addEdge("created", lop, "date", "20171210", "city", "Beijing")
peter.addEdge("created", lop, "date", "20171210", "city", "Beijing")
g.V()

演示图

清除

g.V().drop()

连接MySQL数据库

  1. 在MySQL中建表

    mysql -u root -p
    

    输入密码,之后创建数据库

    mysql> CREATE DATABASE IF NOT EXISTS `hugegraph`;
    Query OK, 1 row affected (0.01 sec)
    
    mysql> show databases;
    +--------------------+
    | Database           |
    +--------------------+
    | cube               |
    | hugegraph          |
    | information_schema |
    | mysql              |
    | performance_schema |
    | sys                |
    +--------------------+
    6 rows in set (0.00 sec)
    
    mysql> exit;
    Bye
    
  2. 修改配置文件

    vim hugegraph-${version}/conf/hugegraph.properties
    
    • 原文件中自带的 jdbc.sslmode 写错了,应该包含下划线
    • 需要注释掉 # cassandra backend config 下面未注释的内容
    backend=mysql
    serializer=mysql
    
    # mysql backend config
    jdbc.driver=com.mysql.jdbc.Driver
    jdbc.url=jdbc:mysql://127.0.0.1:3306
    jdbc.username=root
    jdbc.password=123456
    jdbc.reconnect_max_times=3
    jdbc.reconnect_interval=3
    jdbc.ssl_mode=false
    
  3. 初始化数据库(仅第一次启动时需要),0.10.4版本有bug,解决方案参考错误处理第一条

    hugegraph-${version}/bin/init-store.sh
    ...
    ...
    2020-11-17 09:51:51 2770  [main] [INFO ] com.baidu.hugegraph.HugeGraph [] - Graph 'hugegraph' has been initialized
    2020-11-17 09:51:51 2771  [main] [INFO ] com.baidu.hugegraph.HugeGraph [] - Close graph hugegraph[hugegraph]
    2020-11-17 09:51:51 2788  [Thread-1] [INFO ] com.baidu.hugegraph.HugeGraph [] - HugeGraph is shutting down
    
  4. 启动数据库和可视化

    hugegraph-${version}/bin/start-hugegraph.sh 
    Starting HugeGraphServer...
    Connecting to HugeGraphServer (http://127.0.0.1:8080/graphs)....OK
    hugegraph-studio-${version}/bin/hugegraph-studio.sh
    ...
    ...
    10:20:00.867 [main] INFO  com.baidu.hugegraph.studio.HugeGraphStudio ID:  TS: - HugeGraphStudio is now running on: http://localhost:8088
    

错误处理

  • 运行init-store.sh进行数据库初始化报错SSL链接安全问题

    WARN: Establishing SSL connection without server's identity verification is not recommended. According to MySQL 5.5.45+, 
    5.6.26+ and 5.7.6+ requirements SSL connection must be established by default if explicit option isn't set. For compliance 
    with existing applications not using SSL the verifyServerCertificate property is set to 'false'. You need either to explic
    itly disable SSL by setting useSSL=false, or set useSSL=true and provide truststore for server certificate erification.
    

    遇到错误以后查到了文章hugegraph使用mysql做数据库服务,部署记录,该作者使用了下载GitHub源码自行编译的方法解决了这个问题。

    看到文章中提到的GitLab以及截图(我觉得他打错了,应该是GitHub,因为我找到了原链接),于是按照图中方法修改了init-store.sh,成功运行

    大佬的回复

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

    修改bin/init-store.sh中第33行

    exec $JAVA -cp $LIB/hugegraph-dist-*.jar -Djava.ext.dirs=$LIB:$PLUGINS:$JAVA_HOME/jre/lib/ext 
    com.baidu.hugegraph.cmd.InitStore $CONF/gremlin-server.yaml | grep "com.baidu.hugegraph"
    

    确认已设置JAVA_HOME环境变量

    echo $JAVA_HOME
    

    (如果没有显示jdk路径)要基于每个用户设置JAVA_HOME变量,请将其添加到~/.bashrc或用户登录时加载的任何其他配置文件中

    对于系统范围的设置,请使用/etc/profile.d中的文件。

    • Oracle JDK

      # vim /etc/profile.d/java.sh
      export JAVA_HOME=/usr/java/jdk1.8.0_202-amd64
      export PATH=$JAVA_HOME/bin:$PATH
      export CLASSPATH=.:$JAVA_HOME/jre/lib/ext:$JAVA_HOME/lib/tools.jar
      # source /etc/profile.d/java.sh
      
    • Open JDK

      # vim /etc/profile.d/java.sh
      export JAVA_HOME=/usr/java/latest
      export PATH=$JAVA_HOME/bin:$PATH
      export CLASSPATH=$JAVA_HOME/lib
      # source /etc/profile.d/java.sh
      
  • 端口不一致导致studio报错Failed to connect HugeGraphServer.com.baidu.hugeGraph.rest.ClientException:Failed to do request

    img

    这是因为hugegraph-studio-${version}/conf/hugegraph-studio.properties不能填对应HugeGraph Server配置文件里graph.server.host需要与HugeGraph Server的IP一致,例如其所在虚拟机IP,这样才能正常运行。

原文地址:https://www.cnblogs.com/winng/p/hugegraph_mysql.html