nebula exchange SST ingest失败问题。

nebula 版本:2.5.0
部署方式单机
是否为线上版本:Y

有几个问题请教大神:
1.最终生成SST文件数达到4000个,这个数量是通过哪几个值来决定数量的,是否可以通过减少SST文件数量减少ingest对meta的影响,或者分批次下载然后ingest?
2.执行SST导入目前需要下载HDFS的SST文件,有没有方法将SST导入时不执行下载?

Space:

CREATE SPACE IF NOT EXISTS gan_test17(partition_num=200, replica_factor=3, vid_type=fixed_string(60)); 

指定Spark分片数量:

partition: 50

spark-submit:

spark.sql.shuffle.partitions=20

Meta端异常信息:

E1102 14:17:42.171231 86140 Balancer.cpp:733] 21 partiton failed to transfer leader
E1102 14:17:42.171231 86140 Balancer.cpp:733] 21 partiton failed to transfer leader
  1. 生成的sst文件数量 = spark task数 * 源数据覆盖的Nebula Part数。 当你的数据量覆盖了全部part时,得到的sst文件数量也就是 spark.sql.shuffle.partitions * Nebula partition_num
  2. 不执行download 操作那就只能手动下载到每个storage 的数据目录下, Download命令是将指定space的sst全部下载,手动下载的话可以手动控制分批次ingest。
1 个赞

大神好,针对上述场景还有两个问题需要请教:
1.当Nebula partition_num数比较大,且sql.shuffle.partitions数也较大,那么执行任务最终生成的SST文件就很大了,且下载数据,导入数据时间比较长,且出现Leader报错。
2.当我在客户端增量导入数据时,怎么通过shell命令知道当前space是哪个spaceid(通过如下命令?),否则增量download无法下载已有的重名SST文件。eg:/data1/apps/nebula/data/storage/nebula/3033/download。

/data1/apps/nebula/tools/nebula-console-linux-amd64-v2.5.0 -P 8069 -addr ip -u root -p pass -e "describe space gan_test24" |grep gan_test24 |awk  -F"|" '{print $2}'|sed '/^$/d'
  1. 生成的SST文件应该不是大而是数量多吧, 你可以调小sql.shuffle.partitions的数量减少生成的sst数量。
  2. 手动下载时也可以一个part一个part的下载然后ingest。 leader change的问题你可以在导入时减少其他操作,降低storage的压力。
  3. ingest操作时有个配置可以控制 ingest结束后自动把download目录删除, 你可以在storage的配置文件中加一下: --move_files=true
1 个赞

1.有可能有这种场景导致大而数量多。同一个space下patitions已经固定,而我们场景会有多个tag,每个tag情况可能不一样。
3.download操作前能否删除,因为这个导数极有可能有手动或者全自动化命令操作等混合处理模式。
谢谢大神答疑。

download 操作没有对应的配置来控制是否先清空, 你可以来这里提一个issue Issues · vesoft-inc/nebula · GitHub 描述下需求。
你可以用脚本控制下,每次下载前根据获取的space id 先把该space id 目录下的download删除。

更正一下 move_file 不是删除download 目录 而是将SST文件移动到data 目录下 默认操作时 copy的

2 个赞

好的,如果ingest失败 看来还是需要手动删除download目录?

嗯 其实是这样的