无依赖单机尝鲜 Nebula Exchange 的 SST 导入
本文尝试分享下以最小方式(单机、容器化 Spark、Hadoop、Nebula Graph),快速趟一下 Nebula Exchange 中 SST 写入方式的步骤。本文适用于 v2.5 以上版本的 Nebula- Exchange。
原文链接:
什么是 Nebula Exchange?
之前我在 Nebula Data Import Options 之中介绍过,Nebula Exchange 是一个 Nebula Graph 社区开源的 Spark Applicaiton,它专门用来支持批量或者流式地把数据导入 Nebula Graph Database 之中。
Nebula Exchange 支持多种多样的数据源(从 Apache Parquet、ORC、JSON、CSV、HBase、Hive MaxCompute 到 Neo4j、MySQL、ClickHouse,再有 Kafka、Pulsar,更多的数据源也在不断增加之中)。
如上图所示,在 Exchange 内部,从除了不同 Reader 可以读取不同数据源之外,在数据经过 Processor 处理之后通过 Writer 写入(sink) Nebula Graph 图数据库的时候,除了走正常的 ServerBaseWriter 的写入流程之外,它还可以绕过整个写入流程,利用 Spark 的计算能力并行生成底层 RocksDB 的 SST 文件,从而实现超高性能的数据导入,这个 SST 文件导入的场景就是本文带大家上手熟悉的部分。
详细信息请参阅:Nebula Graph 手册:什么是 Nebula Exchange
Nebula Graph 官方博客也有更多 Nebula Exchange 的实践文章
步骤概观
实验环境
配置 Exchange
生成 SST 文件
写入 SST 文件到 Nebula Graph
实验环境准备
为了最小化使用 Nebula Exchange 的 SST 功能,我们需要:
搭建一个 Nebula Graph 集群,创建导入数据的 Schema,我们选择使用 Docker-Compose 方式、利用 Nebula-Up 快速部署,并简单修改其网络,以方便同样容器化的 Exchange 程序对其访问。
搭建容器化的 Spark 运行环境
搭建容器化的 HDFS
1. 搭建 Nebula Graph 集群
借助于 Nebula-Up 我们可以在 Linux 环境下一键部署一套 Nebula Graph 集群:
待部署成功之后,我们需要对环境做一些修改,这里我做的修改其实就是两点:
只保留一个 metaD 服务
起用 Docker 的外部网络
详细修改的部分参考附录一
应用 docker-compose 的修改:
之后,我们来创建要测试的图空间,并创建图的 Schema,为此,我们可以利用 nebula-console ,同样,Nebula-Up 里自带了容器化的 nebula-console。
进入 Nebula-Console 所在的容器
在 console 容器里发起链接到图数据库,其中
192.168.x.y
是我所在的 Linux VM 的第一个网卡地址,请换成您的
创建图空间(我们起名字叫
sst
),以及 schema
示例输出
2. 搭建容器化的 Spark 环境
利用 big data europe 做的工作,这个过程非常容易。
值得注意的是:
现在的 Nebula Exchange 对 Spark 的版本有要求,在现在的 2021 年 8 月,我是用了 spark-2.4.5-hadoop-2.7 的版本。
为了方便,我让 Spark 运行在 Nebula Graph 相同的机器上,并且指定了运行在同一个 Docker 网络下
然后,我们就可以进入到环境中了:
进到 Spark 容器中之后,可以像这样安装 maven:
还可以这样在容器里下载 nebula-exchange 的 jar
包:
3. 搭建容器化的 HDFS
同样借助 big-data-euroupe 的工作,这非常简单,不过我们要做一点修改,让它的 docker-compose.yml
文件里使用 nebula-net
这个之前创建的 Docker 网络。
详细修改的部分参考附录二
配置 Exchange
这个配置主要填入的信息就是 Nebula Graph 集群本身和将要写入数据的 Space Name,以及数据源相关的配置(这里我们用 csv
作为例子),最后再配置输出(sink)为 sst
Nebula Graph
GraphD 地址
MetaD 地址
credential
Space Name
数据源
source: csv
path
fields
etc.ink: sst
详细的配置参考附录二
注意,这里 metaD 的地址可以这样获取,可以看到 0.0.0.0:49377->9559
表示 49377
是外部的地址。
生成 SST 文件
1. 准备源文件、配置文件
其中 player.csv
的例子:
2. 执行 exchange 程序
进入 spark-master
容器,提交执行 exchange
应用。
检查执行结果:
spark-submit
输出:
验证 HDFS 上生成的 SST 文件:
写入 SST 到 Nebula Graph
这里的操作实际上都是参考文档:SST 导入,得来。其中就是从 console 之中执行了两步操作:
Download
Ingest
其中 Download 实际上是触发 Nebula Graph 从服务端发起 HDFS Client 的 download,获取 HDFS 上的 SST 文件,然后放到 storageD 能访问的本地路径下,这里,需要我们在服务端部署 HDFS 的依赖。因为我们是最小实践,我就偷懒手动做了这个 Download 的操作。
1. 手动下载
这里边手动下载我们就要知道 Nebula Graph 服务端下载的路径,实际上是 /data/storage/nebula/<space_id>/download/
,这里的 Space ID 需要手动获取一下:
这个例子里,我们的 Space Name 是 sst
,而 Space ID 是 49
。
于是,下边的操作就是手动把 SST 文件从 HDFS 之中 get
下来,再拷贝到 storageD 之中。
2. SST 文件导入
进入 Nebula-Console 所在的容器
在 console 容器里发起链接到图数据库,其中
192.168.x.y
是我所在的 Linux VM 的第一个网卡地址,请换成您的
执行
INGEST
开始让 StorageD 读取 SST 文件
我们可以用如下方法实时查看 Nebula Graph 服务端的日志
成功的 INGEST 日志:
附录
附录一
docker-compose.yaml
附录二
https://github.com/big-data-europe/docker-hadoop 的 docker-compose.yml
附录三
nebula-exchange-sst.conf
本文中如有任何错误或疏漏,欢迎去 GitHub:https://github.com/vesoft-inc/nebula issue 区向我们提 issue 或者前往官方论坛:https://discuss.nebula-graph.com.cn/ 的 建议反馈
分类下提建议 👏;交流图数据库技术?加入 Nebula 交流群请先填写下你的 Nebula 名片,Nebula 小助手会拉你进群~~
评论