NebulaGraph适配GaussDB开源验证任务开发心得
背景介绍
开源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的连接信息,导入表的信息以及其字段与顶点和边的映射规则
- 在GaussDB数据库里建立适配数据
- 通过Spark的Scala命令行启动导入指令:${SPARK_HOME}/bin/spark-submit --master "local" --class com.vesoft.nebula.exchange.Exchange <nebula-exchange.jar_path> -c <mysql_application.conf_path>
- 测试图数据库是否有适配数据
适配结果
查询“player100”的所连接的顶点信息:
查询所有顶点和边的名称和数量
由此可见,GaussDB的数据已经通过导入指令以点和边的关系规则导入到NebulaGraph图数据库中,可通过nGQL语句对图数据库的点信息和边信息进行查询
适配常见问题
1.Storaged 容器一直处于offline状态,类似如下这种情况
解决办法:
从 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:
以上就是我适配过程中的思路和心得,欢迎各位读者能在评论区多多发表你的看法,谢谢!!
- 点赞
- 收藏
- 关注作者
评论(0)