nebula 删除并重建相同名称space , download未能正常成功

  • nebula 版本:2.0.1
  • 部署方式(分布式):
  • 是否为线上版本:N
  • 硬件信息
    • 磁盘( SSD)
    • CPU、内存信息
  • 问题的具体描述

一、最近在测试hdfs导入nebula的测试
1.创建space:

CREATE SPACE IF NOT EXISTS test_db  (partition_num = 100, replica_factor = 1, vid_type = FIXED_STRING(60));

ps: spaceId = 12

2.use test_db;

DOWNLOAD HDFS "hdfs://nameservice_test:8020/tmp/nebula/sst/"

INGEST

以上步骤均正常 也将数据成功导入nebula
submit job stats 数据量正常


二、测试删除数据库后重新导入

  1. drop space test_db 后
    创建space:
CREATE SPACE IF NOT EXISTS test_db  (partition_num = 100, replica_factor = 1, vid_type = FIXED_STRING(60));

ps: spaceId = 24

2.use test_db;

DOWNLOAD HDFS "hdfs://nameservice_test:8020/tmp/nebula/sst/"

INGEST

经过以上4步之后 发现数据并没有成功导入到 test_db space之中
对应spaceid 存储文件:
18G 1
1.7G 12
40G 24

spaceid =24 下面data目录已经有数据
但是 submit job stats 数据全是0

问题描述

现在的问题有2个:

1.drop space之后
spaceid 对应的目录如何彻底清除

2.drop space 并新建相同名字的space
数据导入之后无法成功的原因 比较疑惑,希望能得到解答,感谢。

问题1: 2.0 删除 space 现在默认是不会将目录删除的,它有个开关控制,假如你希望删除,你在 storage 的配置文件里面加上 --auto_remove_invalid_space=true,storage 重启之后就会删除掉它

问题2: 你上面也说明了原来space的id是12,你现在把space drop 后,创建同样名字的 space,space id 已经变了,已经不是12 了。集群里面的spaceid, tagid,edgeid 等等都是递增的。然后数据存储的时候,是根据 spaceid来的,不是根据名字来的。

新建的spaceid是24 , 导入之后,data目录有20多G
但是submit job stats 数据却是0

因为你创建完id 为12的space后,你还创建了tag edge 等等,这些用同个id递增的

你好,谢谢你的回答,我知道spaceID是会变的,
第二个问题 我想问的是 : 在新建的space下面 我再次导入数据 INGEST 之后 数据没有真正的导入进去,submit job stats 的结果 tags edges的数据全部都是0 。 download目录产生了24G的数据 data目录在INGEST后也有20G 但是在compact 之后 data目录的数据变得之后79MB了。
在没有重建space 的情况下 同样的步骤 却是正常的 。不知道是什么原因导致我重建space之后数据是没有正常导入的( 用id为12 通过spark生成的sst 文件 导入到 id为24的库中 是没法成功的?)。

数据后续是每天全量全部重新导入的,
所以需要清空当前space下所有的 tags和edges的数据,我们当前最新版本的nebula是否支持
tags和edges 的truncate 而不用重建tags和edges?
另外在download 和 INGEST 成功执行之后 有什么快捷的办法使得 download 目录清空?

你的tagid和edgeid也已经变了,生成的数据里面会记录这些信息,所以数据已经不能用了

我们当前最新版本的nebula是否支持
tags和edges 的truncate 而不用重建tags和edges?

这个功能目前还没有,但是我们可以加到需求表里

你好,space中的tag和edge重建之后会有新的tagId和edgeId, sst文件需要重新生成的。

那就有点麻烦了。
我们现在是准备新建两套集群,一主一备,每天切,每天都做全量导入。
按照当前的模式,如果生成的数据记录了集群的tagid和edgeid 那导入一次文件到2套集群就必须得生成两套数据集(基于不同nebula集群的sst文件集)

基于这种两套集群的全量导入场景,我们的nebula有没有比当前导入方式更合理的解决方案呢?

你的业务场景有多少个space呢?

当前线上用的还是neo4j 准备用nebula来代替
nebula还在测试阶段,目前用的是一个space,估算了数据量 大约每天全量500G数据的样子。

那你做全量的时候,直接把data目录删除重启服务,然后再次启动,安装之前创建的schema的顺序重新创建,这些数据就可以复用。

好的 我测试一下。
是不是我两套集群的spaceid 是一样的 就可以共用一套sst文件集了?

是的,还要保证tag和edge的id也一样

删除data目录之后 新建的tag和edge顺序一样 是否可以完全保障 不同集群的同名id是一样的?

可以的