Download and Ingest

Nebula Graph 存储访问默认使用 RocksDB 作为 key-value 存储引擎。因此在大量数据加载时,可以通过运行一个 map-reduce job 离线生成 RocksDB 的 SST 文件,再直接分发到服务器上。

Nebula Graph 提供了 Spark-SSTFile-Generator 工具。

Spark-SSTFile-Generator 通过映射文件,从 hive 表生成 SST 文件。

具体用法详见 Spark application command line reference

执行后会在 HDFS 上生成 SST 文件,目录结构如下:

  1. |---1 (this is partition number)
  2. | | ---- vertex-${FIRST_KEY_IN_THIS_FILE}.sst
  3. | | ---- edge-${FIRST_KEY_IN_THIS_FILE}.sst
  4. |---2
  5. | ---- vertex-${FIRST_KEY_IN_THIS_FILE}.sst
  6. | ---- edge-${FIRST_KEY_IN_THIS_FILE}.sst
  7. ....

其中各个目录为 partition 编号。

SST 文件名格式为 {TYPE}-${FIRST_KEY_IN_THIS_FILE}.sst,其中 TYPE 表示数据类型,FIRST_KEY_IN_THIS_FILE 为文件中的起始 key。(如果你想自己写工具生成 SST 文件,需要保证每个 SST 文件中的 key 是有序的。)

请确认所有 server 已安装 Hadoop,并且 HADOOP_HOME 已设置。

运行 Nebula Graph console,执行 Download 命令:

  1. nebula > DOWNLOAD HDFS "hdfs://${HADOOP_HOST}:${HADOOP_PORT}/${HADOOP_PATH}"

通过 download 命令以及各个 Storage Servermeta 信息,分别下载各自的 SST 文件到 data/download 目录中。其中:

  • HADOOP_HOST 指定 Hadoop NameNode 地址
  • HADOOP_PORT 指定 Hadoop NameNode 端口号
  • HADOOP_PATH 指定 Hadoop 数据存放目录

如果 download 过程出现错误,请删除 data/download 目录下相应的数据文件,并尝试重新下载。如果遇到多次失败,请在 GitHub 提 issue。

数据下载完毕后,重新执行该命令不会发生任何操作。

SST 数据离线下载完成后,通过 INGEST 命令在线加载到存储服务中。

Ingest 命令如下:

  1. nebula > INGEST

该命令将加载 download 目录中的 SST 文件。

注意: 数据量较大时 ingest 会阻塞 RocksDB,请避免在请求高峰执行该命令。