NebulaGraph适配GaussDB开源验证任务开发心得

举报
huangjiaming 发表于 2024/12/18 16:48:14 2024/12/18
【摘要】 NebulaGraph 是一款开源的、分布式的、易扩展的原生图数据库,专门存储庞大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点和边,还可以将属性附加到点和边上,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。NebulaGraph 作为一个典型的图数据库,适合存储大多数从现实抽象出的数据类型,可以将丰富的关系通过边及其类型和属性自然地呈现。

背景介绍

开源for Huawei(参考:https://developer.huaweicloud.com/programs/opensource/contributing/)  通过和公司、高校、社区的开发者合作,完成鲲鹏、昇腾、欧拉、鸿蒙、高斯、云服务等与开源软件的适配开发,帮助繁荣Huawei的基础生态,同时让开源软件能够更加简单、高效的运行于华为云上。

开始之前,开发者可以下载 开源for Huawei Wiki(参考:https://gitcode.com/HuaweiCloudDeveloper/OpenSourceForHuaweiWiki/overview 了解详细的开发步骤,技术准备,以及开发过程需要的各种资源。

工具功能介绍

世界上几乎所有领域的事物都有内在联系,像关系型数据库这样的建模系统会提取实体之间的关系,并将关系单独存储到表和列中,而实体的类型和属性存储在其他列甚至其他表中,这使得数据管理费时费力。

而NebulaGraph 是一款开源的、分布式的、易扩展的原生图数据库,专门存储庞大的图形网络并从中检索信息的数据库。它可以将图中的数据高效存储为点和边,还可以将属性附加到点和边上,能够承载包含数千亿个点和数万亿条边的超大规模数据集,并且提供毫秒级查询。NebulaGraph 作为一个典型的图数据库,适合存储大多数从现实抽象出的数据类型,可以将丰富的关系通过边及其类型和属性自然地呈现。

适配准备

1.NebulaGraph图数据库的安装

2.NebulaConsole命令行的编译

3.Spark的安装(注意与NebulaExchange)

3.NebulaExchange导入导出工具的maven编译

4.已安装并配置好Gauss数据库

适配过程

  • 通过docker-compose安装NebulaGraph图数据库并启动graph、meta、storage三个服务
  • 安装NebulaConsole命令行连接NebulaGraph的graph服务,此时可进入图数据库进行操作
  • 安装Spark
  • 安装Nebula Exchange 导入导出工具(注意需与spark的版本兼容),新建Gauss.conf文件,内容是GaussDB的连接信息,导入表的信息以及其字段与顶点和边的映射规则
  • 1.png
  • 2.png

  • GaussDB数据库里建立适配数据
  • 通过SparkScala命令行启动导入指令:${SPARK_HOME}/bin/spark-submit --master "local" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <mysql_application.conf_path>
  • 测试图数据库是否有适配数据

适配结果

查询“player100”的所连接的顶点信息:

3.png

查询所有顶点和边的名称和数量

4.png

由此可见,GaussDB的数据已经通过导入指令以点和边的关系规则导入到NebulaGraph图数据库中,可通过nGQL语句对图数据库的点信息和边信息进行查询

适配常见问题

1.Storaged 容器一直处于offline状态,类似如下这种情况

5.png

解决办法:

从 3.0.0 版本开始,在配置文件中添加的 Storage 节点无法直接读写,配置文件的作用仅仅是将 Storage 节点注册至 Meta 服务中。首次连接到 NebulaGraph 后,必须先注册 Storage 服务使用ADD HOSTS命令后,才能正常读写 Storage 节点,也能在命令行里正常查询图数据。

如果发现 Storaged 容器的健康状态一直是offline,可以通过 NebulaGraph Console 连接 NebulaGraph,进入Nebula数据库后,并手动执行ADD HOSTS命令对其进行激活。激活命令如下:

nebula> ADD HOSTS "storaged0":9779,"storaged1":9779,"storaged2":9779

或者如果NebulaGraph和Nebula Console是装在同一台机器上,也可输入以下命令:

nebula> ADD HOSTS 127.0.0.1:9779,127.0.0.1:9779,127.0.0.1:9779

2.如何处理错信息 :RPC failure in MetaClient: Connection refuse

报错原因:通常为 metad 服务状态异常,或是 metad 和 graphd 服务所在机器网络不通。

排查办法:

①在 metad 所在服务器查看下 metad 服务状态,如果服务状态异常,可以重新启动 metad 服务。

②在报错服务器下使用   telnet meta-ip:port  查看网络状态。

③检查配置文件中的端口配置,如果端口号与连接时使用的不同,改用配置文件中的端口或者修改配置。

3.在Exchange运行数据导入指令时,报 NoSuchMethod、MethodNotFound 错误(Exception in thread "main" java.lang.NoSuchMethodError等):

排查方向:绝大多数是因为 JAR 包冲突和版本冲突导致的报错,请检查报错服务的版本,与 Exchange 中使用的版本进行对比,检查是否一致,尤其是 Spark 版本、Scala 版本,看看JAR包与Exchange版本以及Spark版本是否兼容。

4.运行导入指令时报错:com.facebook.thrift.protocol.TProtocolException: Expected protocol id xxx

排查方向:请检查 连接数据源的配置文件里的NebulaGraph 服务端口配置是否正确。

解决办法:我这边是用docker安装的,解决办法查看如下:

在nebula-docker-compose目录下执行docker-compose ps:

6.png

以上就是我适配过程中的思路和心得,欢迎各位读者能在评论区多多发表你的看法,谢谢!!

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。